2009-05-20 13 views
3

Ich entwickle eine Anwendung, die in der Taskleiste sitzt und Aktionen im aktiven Fenster ausführen kann. Wenn jedoch auf das Symbol in der Taskleiste geklickt wird, gibt GetForegroundWindow() die Taskleiste zurück. Ich muss das Fenster aufrufen, das vor der Taskleiste aktiv war.Fensterfenster des zuletzt aktivierten Fensters

Ich habe versucht, das Desktop-Fenster mit EnumWindows und GetWindow zu nummerieren, aber das ist oft Desktop-Gadgets und andere Top-Elemente, die zuletzt nicht aktiv waren. Ist es überhaupt möglich, oder die Information komplett verloren geht, wenn das Fenster deaktiviert ist?

Antwort

2

Ich denke, der einzige Weg, um diese Informationen zu erhalten, ist durch die Installation eines systemweiten Hook (SetWindowsHookEx) auf WH_CALLWNDPROC und die Erfassung aller WM_ACTIVATEAPP. Dadurch können Sie sogar den vollständigen Verlauf des aktiven Fensters verfolgen.

+0

Das funktioniert wirklich gut. Ich habe jedoch ein Problem mit einigen Anwendungen, die nicht betroffen sind, weil sie 64-Bit sind (oder 32-Bit, wenn ich für 64-Bit kompiliere). Irgendwelche Ideen? –

+0

Ich kann sowohl mit einer 32-Bit- als auch einer 64-Bit-DLL haken und eine Art von Interprozesskommunikation zwischen den beiden verwenden, aber es sieht sehr unordentlich aus. –

+0

Leider glaube ich nicht, dass es eine saubere Art, es zu tun, so zwei DLLs und einige IPC ist ASFAIK der einzige Weg zu gehen. –

Verwandte Themen