我正在构建一个基于C++(Qt)的应用程序,用于控制基于Flash的UI。由于Flash运行时会泄漏大量内存,因此我们将UI作为.swf执行,并加载到独立的Flash播放器中,与用C++编写的命令和控制应用程序分开。

C++使用适当的参数将Flash Player作为外部进程启动,并通过连接到localhost的TCP套接字与其进行通信。

该应用程序主要在Windows XP及更高版本上运行。

独立运行Flash Player的不幸副作用是,Alt +选项卡列表以及Windows的任务栏中显示了两个应用程序(一个是我们的应用程序,另一个是Flash Player)。此外,由于应用程序以全屏模式运行,因此Flash必须管理整个屏幕。允许C++应用绘制屏幕的一部分将是一个巨大的进步。

我们希望以某种方式合并两者,同时将我们自己的应用程序置于控制之下。我在考虑Google Chrome的思路,它似乎在单独的进程中运行每个浏览器标签,同时在单个窗口中显示所有输出。

我一直在阅读Win32 API(和Google),以确定是否有可能做到这一点。到目前为止,我已经提出了将DLL注入(inject)作为唯一的半可行解决方案,但是我非常想考虑该计划B。

任何建议,将不胜感激。

最佳答案

Alt + Tab列表显示可见的顶级窗口(无父窗口),并且没有WS_EX_TOOLWINDOW扩展样式。因此,如果您有两个进程中的两个窗口,但只想在Alt-Tab列表中(以及在任务栏上)看到一个窗口,那么您有几个选择:

  • 将WS_EX_TOOLWINDOW添加到其中一个窗口。
  • 将其中一个窗口重新置于隐藏的顶级窗口中。
  • 将一个窗口(可能是Flash Player)重新父级到另一个窗口。这很棘手,但这可能就是Chrome和许多其他多进程单窗口应用程序的工作方式。使棘手的是处理窗口的生存期以及无意中序列化了消息队列。
  • 10-07 14:11
    查看更多