как управлять окнами во внешних приложениях - PullRequest
4 голосов
/ 07 февраля 2012

У меня есть 2 приложения AIR (A и B), которые могут взаимодействовать через объект LocalConnection. Я убедился, что сообщения определенно отправляются / принимаются надлежащим образом.

Я хочу, чтобы A сказал B выйти вперед. Оба приложения работают в полноэкранном режиме:

stage.fullScreenSourceRect = new Rectangle(0, 0, 1080, 1920);
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

Я пробовал несколько перестановок, но пока ничего не работает.

private function initSlave(channel: String): void {
    conn = new LocalConnection();
    conn.client = {
        'activateSlave': activateSlave
    };
    conn.allowDomain("*");
    conn.connect("_" + channel);
}

private function activateSlave(): void {
    stage.nativeWindow.orderToFront();

    // or

    stage.nativeWindow.activate();

    // or

    stage.nativeWindow.alwaysInFront = true;
    stage.nativeWindow.alwaysInFront = false;
}

Если я оставлю оба приложения в оконном режиме (stage.displayState = StageDisplayState.NORMAL), то переключение alwaysInFront на самом деле работает. Звонки activate() или orderToFront() все равно ничего не делают. Если я пытаюсь переключить alwaysInFront, а затем установить приложение в полноэкранный режим, приложение заканчивается полноэкранным за моим оконным приложением. Может быть, есть событие, которое я должен подождать, прежде чем установить приложение в полноэкранный режим?

Я нашел поток, в котором упоминается, что orderToFront() работает только относительно окон в том же приложении, что объясняет, почему оно, похоже, ничего не делает.

У кого-нибудь есть идеи, как это осуществить? Может быть, у меня есть способ встроить B в приложение A, чтобы они на самом деле были одним и тем же приложением? Я не уверен, как сделать это с приложением AIR так же просто, как просто загрузить SWF из-за необходимости внешних ресурсов.

1 Ответ

2 голосов
/ 11 февраля 2012

Поскольку никто другой не предложил решение, я просто быстро упомяну взлом, который я использую. В основном у меня есть 2 LocalConnection каналов, один от A до B и один от B до A. Видимая программа (например, A) затем станет белой, установит visible на false и отправит сообщение на B, отказавшись от управления. B инициализировался с stage.nativeWindow.visible = false, и когда он получает сообщение от A, он становится видимым как полный белый экран и исчезает в GUI. Есть небольшое смещение, прежде чем A устанавливает visible в false, чтобы дать B время для отображения, в противном случае появляется всплеск в короткий момент, когда оба окна свернуты.

Во всяком случае, вы идете, это некрасиво, но на самом деле работает довольно хорошо.

...