【问题标题】:Detect when the Foreground windows changes检测前台窗口何时更改
【发布时间】:2011-05-03 21:49:12
【问题描述】:

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

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

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

【问题讨论】:

  • 我记得有一个技巧可以在 Windows 3.x 中侦听窗口的消息队列,不确定该技巧在 Win32 上是否仍然有效
  • 我希望您不要试图确保您的窗口始终位于所有其他窗口的顶部。 blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx
  • @Jim 别担心,我不会那样做的。

标签: winapi


【解决方案1】:

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

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

您会感兴趣的调用是第一个参数为HCBT_Activate 的调用。 wParam 参数会告诉你窗口句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2010-10-25
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多