Изменено ли системное событие Windows в активном окне?
Настольное приложение, которое я разрабатываю, должно знать, какие окна были активны во время запуска приложения. В настоящее время он выполняет вызов GetForegroundWindow()
(user32.dll
) каждые 250 мс. Этот подход не очень точен.
Есть ли какое-либо событие Windows (WINAPI?), которое срабатывает при каждом изменении активного (сфокусированного) окна? Я хотел бы подписаться на мою функцию обратного вызова.
Спасибо.
Ответы
Ответ 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 */
}
Ответ 2
Там сообщение WM_ACTIVATE, которое отправляется в активированные и дезактивированные окна.