如何在外部应用程序中管理Windows

时间:2012-02-06 22:14:40

标签: flex air

我有2个AIR应用程序(AB)能够通过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 个答案:

答案 0 :(得分:2)

由于没有其他人提供解决方案,我只是快速提到我正在使用的黑客。基本上我有2个LocalConnection个频道,一个来自AB,另一个来自BA。 然后,可见程序(例如A)将淡化为白色,将visible设置为false,并向B发送消息以放弃控制权。 B已使用stage.nativeWindow.visible = false进行初始化,当它收到来自A的消息时,它会以全白屏显示,并在GUI中淡入淡出。在Avisible设置为false以显示B时,会有轻微偏移,否则在两个窗口最小化的短暂时刻会出现弹出。< / p>

无论如何,你去了,它很丑,但实际上效果还不错。