GetForegroundWindow
函数可以获得当前活动窗口句柄,但现在 i want to detect when the active window (of any application) changes (become active)
。我想到的第一个解决方案是
我想知道是否存在更好的方法来做到这一点,可能使用 Windows 消息或其他东西。
SetWindowsHookEx
安装 CBT 挂钩。 MSDN 描述了您将提供的回调函数:
系统在激活、创建、销毁、最小化、最大化、移动或调整窗口大小之前调用此函数;在完成系统命令之前;从系统消息队列中删除鼠标或键盘事件之前;在设置键盘焦点之前;或者在与系统消息队列同步之前。基于计算机的培训 (CBT) 应用程序使用此挂钩过程从系统接收有用的通知。
您感兴趣的调用是第一个参数为
HCBT_Activate
的调用。 wParam
参数将告诉您窗口句柄。
SetWindowsHookEx 可能很难使用,因为钩子必须放置在单独的 dll 中。另一种选择是使用 EVENT_SYSTEM_FOREGROUND 的 SetWinEventHook,它只需要运行消息循环。