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.