在Delphi XE中,我试图使用GetForegroundWindow来检测在激活应用程序之前激活的窗口。 “已激活”表示应用程序可能已从图标状态恢复,或者已通过alt +选项卡切换,或通过激活热键等提供。在我的应用程序激活之前检测到哪个窗口处于活动状态
问题是,所有可用的应用程序事件(OnActivate, OnRestore)来得太晚,所以GetForegroundWindow返回我自己的窗体句柄。主要形式的事件甚至没有用处。在主窗体中处理WM_ACTIVATEAPP也发生得太晚了。
一种方法是在应用程序不活动时继续检查定时器上的活动窗口,但这看起来很浪费。一个更好的解决方案是将TApplication.WndProc子类化并在处理WM_ACTIVATEAPP之前完成我的工作,但我不认为TApplication可以被子类化。
有没有更好的方法?
您可以处理任何消息`TApplication.WndProc`接收调用`Application.HookMainWindow`。在TApplication执行任何自己的处理之前,hook程序被调用。尽管如此,我不知道'wm_ActivateApp`能否可靠地告诉你想让你认为你需要知道。 – 2011-01-26 03:35:49