请参阅the MSDN documentation for SetForegroundWindow
Windows故意拒绝许多将特定窗口设置为前台的请求,其目标是:
当用户使用另一个窗口时,应用程序无法强制窗口进入前台。
SetForegroundWindow
成功的条件记录为:
系统限制哪些进程可以设置前景窗口。仅当满足下列条件之一时,进程才能设置前台窗口:
- 该过程是前台过程。
- 该过程由前台进程启动。
- 该过程收到了最后一个输入事件。
- 没有前台进程。
- 正在调试该过程。
- 前台进程不是现代应用程序或开始屏幕。
- 前景未锁定(请参阅
LockSetForegroundWindow
)。- 前台锁定超时已过期(请参阅
SPI_GETFOREGROUNDLOCKTIMEOUT
中的SystemParametersInfo
)。- 没有菜单处于活动状态。
此文档听起来不正确。我认为它起初是一个较短的清单,其中只有一个条件需要满足。但实际行为更复杂。
任何人都可以确认实际行为吗?是吗:
只有在以下所有操作都成立时,进程才能设置前台窗口:
- 满足以下一个或多个条件:
- 该过程是前台过程。
- 该过程由前台进程启动。
- 在前台流程
的AllowSetForegroundWindow
调用中确定了该流程- 该过程收到了最后一个输入事件。
- 没有前台进程。
- 正在调试该过程。
- 前台进程不是现代应用程序或开始屏幕。
- 以下两个条件之一是真的:
- 前景未锁定(请参阅
LockSetForegroundWindow
)。- 前台锁定超时已过期(请参阅
SPI_GETFOREGROUNDLOCKTIMEOUT
中的SystemParametersInfo
)。- 没有菜单处于活动状态。
如果其他专家同意此处的文档存在错误,我将提交有关Connect引用此问题的错误报告。