flex – 如何在外部应用程序中管理窗口

我有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一样,因为需要外部资源.

最佳答案 由于没有其他人提供解决方案,我只是快速提到我正在使用的黑客.基本上我有2个LocalConnection通道,一个从A到B,一个从B到A.

然后,可见程序(例如A)将淡入淡出,将可见设置为假,并向B发送消息以放弃控制. B已使用stage.nativeWindow.visible = false初始化自身,当它收到来自A的消息时,它将显示为全白屏幕并在GUI中淡入淡出.在将A设置为false以显示B时间之前有一个轻微的偏移,否则在两个窗口最小化时的短暂时刻会出现弹出.

无论如何,你去,它很丑,但它实际上运作得相当好.

点赞