我有一个简单的win32应用程序,它使用createProcess方法来调用Qt应用程序。
问题在于我喜欢将Qt应用程序带到前台。
谁对此负责?父win32应用程序或Qt应用程序?
答案 0 :(得分:3)
当前具有前景焦点的应用程序是唯一允许更改前景焦点的应用程序。您需要使用SetForegroundWindow
function来行使此权利。
文档中的“备注”部分包含适用的限制列表:
系统限制哪些进程可以设置前景窗口。仅当满足下列条件之一时,进程才能设置前台窗口:
- 该过程是前台过程。
- 该过程由前台进程启动。
- 该过程收到了最后一个输入事件。
- 没有前台进程。
- 正在调试前台进程。
- 前景未锁定(请参阅
LockSetForegroundWindow
)。- 前台锁定超时已过期(请参阅
SPI_GETFOREGROUNDLOCKTIMEOUT
中的SystemParametersInfo
)。- 没有菜单处于活动状态。
当用户使用另一个窗口时,应用程序无法强制窗口到达前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。
真正的问题是为什么你需要这样做。更改前台应用程序很可能会让您遇到麻烦,无论是Windows上的所有限制还是您的用户。这是一个非常用户敌意的行为,这是近年来Windows加强对它的限制的原因之一。
答案 1 :(得分:2)
获取Qt应用程序的窗口句柄并调用SetForegroundWindow
答案 2 :(得分:0)
您可能希望从父进程执行此操作。使用SetForegroundWindow
的最干净/最可靠的方法是从当前位于前台的进程调用它。