我正在开发的桌面应用程序需要知道在运行应用程序时哪些窗口处于活动状态。目前,它每250毫秒执行GetForegroundWindow()
次呼叫(user32.dll
)。这种方法不是很准确。
是否有任何Windows(WINAPI?)事件在每次活动(聚焦)窗口更改时触发?我想订阅我的回调函数。
感谢。
答案 0 :(得分:31)
是的,您可以使用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 */
}
答案 1 :(得分:2)
有WM_ACTIVATE message,它被发送到激活和停用的窗口。