O evento do sistema do Windows na janela activa foi alterado?

a aplicação desktop que estou a desenvolver precisa de saber quais as janelas que estavam activas enquanto a aplicação estava a ser executada. Actualmente executa GetForegroundWindow() chamada (de user32.dll) a cada 250 msec. A abordagem não é muito precisa.

Há alguma janela (WINAPI?) evento que dispara sempre que a janela activa (focada) muda? Gostaria de me inscrever na minha função de callback.

Obrigado.

Author: David Heffernan, 2010-12-10

2 answers

Sim, pode usar a funçãoSetWinEventHook .

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 */
}
 28
Author: DReJ, 2010-12-10 10:08:29

Há a mensagemWM_ ACTIVE , que é enviada para as janelas activadas e desactivadas.

 2
Author: Piskvor, 2010-12-10 10:07:32