【发布时间】:2011-06-15 15:00:08
【问题描述】:
在 Delphi XE 中,我正在尝试使用 GetForegroundWindow 来检测在我的应用程序被激活之前处于活动状态的窗口。 “已激活”表示该应用可能已从图标状态恢复,或已通过 alt+tab 切换到,或通过激活热键等方式调出。
问题是所有可用的应用程序事件(OnActivate、OnRestore)都来得太晚了,所以 GetForegroundWindow 返回我自己的表单句柄。主窗体的事件就更没用了。在主窗体中处理 WM_ACTIVATEAPP 也太晚了。
一种方法是在我的应用程序不活动时继续检查计时器上的活动窗口,但这似乎相当浪费。更好的解决方案是将 TApplication.WndProc 子类化并在处理 WM_ACTIVATEAPP 之前做我的事情,但我认为 TApplication 不能被子类化。
有没有更好的办法?
【问题讨论】:
-
您可以通过调用
Application.HookMainWindow处理TApplication.WndProc收到的任何消息。在TApplication进行任何自己的处理之前,会调用挂钩程序。不过,我不知道wm_ActivateApp是否会可靠地告诉你想要你认为你需要知道的信息。
标签: windows delphi foreground