2009-05-20 6 views
3

Je développe une application qui se trouve dans la zone de notification et qui peut effectuer des actions sur la fenêtre active. Mais lorsque vous cliquez sur l'icône dans la barre d'état système, GetForegroundWindow() renvoie la barre des tâches. J'ai besoin d'avoir la fenêtre qui était active avant la barre des tâches.Récupère la poignée de la dernière fenêtre activée

J'ai essayé d'énumérer la fenêtre du bureau avec EnumWindows et GetWindow, mais cela fait souvent apparaître des gadgets de bureau et d'autres éléments de haut niveau qui n'étaient pas actifs en dernier. Est-il même possible, ou l'information est-elle complètement perdue lorsque la fenêtre est désactivée?

Répondre

2

Je pense que la seule façon d'obtenir cette information est en installant un crochet système (SetWindowsHookEx) sur WH_CALLWNDPROC et en capturant tous les WM_ACTIVATEAPP. Cela vous permettra même de suivre l'historique complet de la fenêtre qui était active quand.

+0

Cela fonctionne très bien. Cependant, j'ai un problème à propos de certaines applications qui ne sont pas affectées car elles sont 64 bits (ou 32 bits si je compile pour 64 bits). Des idées? –

+0

Je peux raccorder à la fois une DLL 32 bits et une DLL 64 bits et utiliser une sorte de communication interprocessus entre les deux, mais cela semble très désordonné. –

+0

Malheureusement, je ne pense pas qu'il y ait une manière propre de le faire, donc deux DLL et un IPC est ASFAIK la seule façon d'y aller. –

Questions connexes