检测前景窗口何时更改

时间:2011-05-03 21:49:13

标签: delphi winapi

我知道使用GetForegroundWindow函数可以获取当前活动窗口句柄,但现在i want to detect when the active window (of any application) changes (become active)。我想到的第一个解决方案是

  1. 存储GetForegroundWindow函数返回的当前值(句柄)。
  2. 使用计时器组件再次检查GetForegroundWindow返回的值并与旧值进行比较。
  3. 我想知道是否有更好的方法可以使用Windows消息或其他东西。

1 个答案:

答案 0 :(得分:7)

使用SetWindowsHookEx安装CBT挂钩。 MSDN描述了您将提供的callback function

  

系统在激活,创建,销毁,最小化,最大化,移动或调整窗口大小之前调用此函数;在完成系统命令之前;从系统消息队列中删除鼠标或键盘事件之前;在设置键盘焦点之前;或者在与系统消息队列同步之前。基于计算机的培训(CBT)应用程序使用此挂钩过程从系统接收有用的通知。

您感兴趣的电话是第一个参数为HCBT_Activate的电话。 wParam参数将告诉您窗口句柄。