Mar*_*ski 5 windows delphi foreground
在Delphi XE中,我尝试使用GetForegroundWindow来检测在应用程序激活之前立即激活的窗口."已激活"表示应用程序可能已从标志状态恢复,或者已通过alt + tab切换到,或者由激活热键等启动.
问题是所有可用的应用程序事件(OnActivate,OnRestore)来得太晚,因此GetForegroundWindow返回我自己的表单的句柄.主要形式的事件甚至没那么有用.在主窗体中处理WM_ACTIVATEAPP也发生得太晚了.
一种方法是在我的应用程序未激活时继续检查计时器上的活动窗口,但这似乎相当浪费.一个更好的解决方案是继承TApplication.WndProc并在处理WM_ACTIVATEAPP之前完成我的工作,但我不认为TApplication可以是子类.
有没有更好的办法?
当您的应用程序激活时,它将成为最顶层的窗口.IOW,它跳到顶部Z顺序位置.
有了这个,之前的最顶层窗口被降级为"正好在新的最顶层窗口下方"位置.IOW,它在Z顺序位置成为第二位.
调用GetNextWindow并传递表单的句柄和GW_HWNDNEXT可能会给你所需的结果.