在 Delphi XE 中,我试图使用 GetForegroundWindow 来检测在我的应用程序被激活之前处于活动状态的窗口。“已激活”表示该应用可能已从图标状态恢复,或者通过 alt+tab 切换到,或者通过激活热键等调出。
问题是所有可用的应用程序事件(OnActivate、OnRestore)都来得太晚了,所以 GetForegroundWindow 返回我自己的表单句柄。主窗体的事件就更没用了。在主窗体中处理 WM_ACTIVATEAPP 也太晚了。
一种方法是在我的应用程序不活动时继续检查计时器上的活动窗口,但这似乎相当浪费。一个更好的解决方案是将 TApplication.WndProc 子类化并在处理 WM_ACTIVATEAPP 之前做我的事情,但我不认为 TApplication 可以被子类化。
有没有更好的办法?