检测前景窗口何时更改

Sal*_*dor 7 delphi winapi

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

  1. 存储GetForegroundWindow函数返回的当前值(句柄).
  2. 使用计时器组件再次检查GetForegroundWindow返回的值并与旧值进行比较.

我想知道是否存在更好的方法来执行此操作可能使用Windows消息或其他东西.

Rob*_*edy 7

使用SetWindowsHookEx安装CBT钩子.MSDN描述了您将提供的回调函数:

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

您感兴趣的调用是第一个参数所在的调用HCBT_Activate.该wParam参数将告诉您窗口句柄.