2011-05-03 74 views
6

我知道它使用GetForegroundWindow功能,我可以得到当前活动窗口的句柄,但现在i want to detect when the active window (of any application) changes (become active)。我想到的第一个解决方案是检测时,前台窗口改变

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

我想知道如果存在一个更好的方式来做到这一点可能使用Windows消息或其他东西。

+0

我记得有一招窃听到在Windows 3.x的一个窗口,消息队列,不知道这招仍然工作在Win32 – Johan 2011-05-03 21:59:18

+2

我希望你不是想确保你的窗口始终在其他窗口之上。 http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx – 2011-05-03 22:52:48

+0

@Jim别担心,我没有那样做。 – Salvador 2011-05-04 21:33:58

回答

7

使用SetWindowsHookEx安装一个CBT钩子。 MSDN介绍callback function你提供:

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

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