检测前景窗口何时发生变化

问题描述 投票:0回答:2

我知道使用

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

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

我想知道是否存在更好的方法来做到这一点,可能使用 Windows 消息或其他东西。

winapi
2个回答
12
投票

使用

SetWindowsHookEx
安装 CBT 挂钩。 MSDN 描述了您将提供的回调函数

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

您感兴趣的调用是第一个参数为

HCBT_Activate
的调用。
wParam
参数将告诉您窗口句柄。


0
投票

SetWindowsHookEx 可能很难使用,因为钩子必须放置在单独的 dll 中。另一种选择是使用 EVENT_SYSTEM_FOREGROUND 的 SetWinEventHook,它只需要运行消息循环。

© www.soinside.com 2019 - 2024. All rights reserved.