如何使用SetWinEventHook()函数获取活动窗口更改消息

How to use SetWinEventHook() function to get Active Window changed message

本文关键字:窗口 活动 消息 获取 函数 何使用 SetWinEventHook      更新时间:2023-10-16

我一直在做一个项目,该项目需要检测当前活动窗口并连续获取活动窗口标题。有人能向我解释如何使用SetWinEventHook()函数来获取活动窗口更改的消息吗。[我使用了带有计时器的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 */
}

我找到了解决方案。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 */
     }
}