【问题标题】:How to use SetWinEventHook() function to get Active Window changed message如何使用 SetWinEventHook() 函数获取活动窗口更改消息
【发布时间】:2015-09-09 01:25:39
【问题描述】:

我一直在做一个需要检测当前活动窗口并连续获取活动窗口标题的项目。 谁能解释我如何使用 SetWinEventHook() 函数来获取 Active Window 更改消息。 [我使用带有计时器的 GetForegroundWindow() 函数来获取活动窗口。由于计时器,这种方法不是很准确。所以我需要将它与 SetWinEventHook() 函数一起使用。有人可以解释我该怎么做吗? ]

hEvent = SetWinEventHook(EVENT_SYSTEM_FOREGROUND , EVENT_SYSTEM_FOREGROUND ,NULL, 
WinEventProcCallback, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);


VOID CALLBACK WinEventProcCallback ( HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
      /* how to get active window message */
}

【问题讨论】:

标签: c++ winapi window


【解决方案1】:

我找到了解决方案。 EVENT_SYSTEM_FOREGROUND 事件是缺失的部分。即使前台窗口已更改为另一个窗口,系统也会发送此事件。我们可以使用这个事件来获取当前的活动窗口。

VOID CALLBACK WinEventProcCallback ( HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
     if (dwEvent == EVENT_SYSTEM_FOREGROUND)
     {
         /* do something */
     }
}

【讨论】:

  • 请注意,当窗口未最小化时不会发送EVENT_SYSTEM_FOREGROUND 事件。
猜你喜欢
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
相关资源
最近更新 更多