【发布时间】:2011-08-20 16:00:41
【问题描述】:
我有一个简单的 win32 应用程序,它使用 createProcess 方法调用 Qt 应用程序。
问题是我喜欢把 Qt 应用程序带到前台。
谁对此负责?父 win32 应用还是 Qt 应用?
【问题讨论】:
我有一个简单的 win32 应用程序,它使用 createProcess 方法调用 Qt 应用程序。
问题是我喜欢把 Qt 应用程序带到前台。
谁对此负责?父 win32 应用还是 Qt 应用?
【问题讨论】:
获取Qt应用程序的窗口句柄并调用SetForegroundWindow
【讨论】:
当前具有前景焦点的应用程序是唯一允许改变前景焦点的应用程序。您需要使用SetForegroundWindow function 来行使此权利。
文档中的“备注”部分包含适用的限制列表:
系统限制哪些进程可以设置前台窗口。只有满足以下条件之一,进程才能设置前台窗口:
- 该进程是前台进程。
- 进程由前台进程启动。
- 进程收到最后一个输入事件。
- 没有前台进程。
- 正在调试前台进程。
- 前景未锁定(请参阅
LockSetForegroundWindow)。- 前台锁定超时已过期(请参阅
SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。- 没有处于活动状态的菜单。
当用户正在使用另一个窗口时,应用程序不能将一个窗口强制置于前台。相反,Windows 会闪烁窗口的任务栏按钮以通知用户。
真正的问题是您为什么需要这样做。更改前台应用程序很可能会给您带来麻烦,无论是 Windows 对其施加的所有限制,还是您的用户。这是一种对用户非常不利的行为,这也是 Windows 近几年来收紧对它的限制的原因之一。
【讨论】:
您可能希望从父进程执行此操作。使用SetForegroundWindow 的最简洁/最可靠的方法是从当前处于前台的进程中调用它。
【讨论】: