L’événement système Windows sur la fenêtre active a-t-il changé?

L’application de bureau que je développe nécessite de savoir quelles fenêtres étaient actives pendant l’exécution de l’application. Actuellement, il exécute l’appel GetForegroundWindow() (de user32.dll ) toutes les 250 ms. L’approche n’est pas très précise.

Existe-t-il un événement Windows (WINAPI?) Qui se déclenche chaque fois que la fenêtre active (ciblée) a changé? Je voudrais m’abonner à ma fonction de rappel.

Merci.

Oui, vous pouvez utiliser la fonction 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 */ } 

Le message WM_ACTIVATE est envoyé aux fenêtres activées et désactivées.