windows – 在我的应用程序激活之前检测哪些窗口处于活动状态

在Delphi XE中,我尝试使用GetForegroundWindow来检测在应用程序激活之前立即激活的窗口. “已激活”表示应用程序可能已从标志状态恢复,或者已通过alt选项卡切换,或通过激活热键等启动.

问题是所有可用的应用程序事件(OnActivate,OnRestore)来得太晚,因此GetForegroundWindow返回我自己的表单的句柄.主要形式的事件甚至没那么有用.在主窗体中处理WM_ACTIVATEAPP也发生得太晚了.

一种方法是在我的应用程序未激活时继续检查计时器上的活动窗口,但这似乎相当浪费.一个更好的解决方案是继承TApplication.WndProc并在处理WM_ACTIVATEAPP之前完成我的工作,但我不认为TApplication可以是子类.

有没有更好的办法?

最佳答案
当您的应用程序激活时,它将成为最顶层的窗口. IOW,它跳到顶部Z顺序位置.

有了这个,之前的最顶层窗口被降级为“正好在新的最顶层窗口下方”位置. IOW,它在Z顺序位置成为第二位.

调用GetNextWindow并传递表单句柄和GW_HWNDNEXT可能会给你所需的结果.

转载注明原文:windows – 在我的应用程序激活之前检测哪些窗口处于活动状态 - 代码日志