一尘不染

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

c#

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

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

谢谢。


阅读 383

收藏
2020-05-19

共1个答案

一尘不染

是的,您可以使用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 */
}
2020-05-19