活动窗口上是否有Windows系统事件更改?

我正在开发的桌面应用程序需要知道在应用程序运行时哪些窗口处于活动状态。 目前它每250毫秒执行GetForegroundWindow()调用( user32.dll )。 这个方法不是很准确。

是否有任何Windows(WINAPI?)事件每次激活(聚焦)窗口更改时触发? 我想订阅我的callback函数。

谢谢。

是的,你可以使用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) { /* your code here */ } 

有WM_ACTIVATE消息 ,它被发送到激活和停用的窗口。