WM_Messages aus fremden threads abfangen

Ich möchte in meinem Programm z.B. mitbekommen, wenn ein anderes Programm gestartet oder beendet wird. Auch wäre es hilfreich, zu Wissen, wenn sich die Größe eines Fensters geändert hat.

Welche Möglichkeiten gibt es da?

Die Messages WM_SHOWWINDOW, WM_DESTROY oder WM_WINDOWPOSCHANGED wären eigentlich ideal, aber sie werden ja immer nur an das Fenster mit dem entsprechenden Handle gesandt. Gibt es eine Möglichkeit, wie ich Windows mitteilen kann, dass ich die Messages von allen Tasks sehen möchte?

Das Programm „WINSIGHT“ von Borland kann es, also muss es doch möglich sein!

Wer kann mir einen Tipp geben?

Gruß Dieter

Einmal gibt es Messages aus dem Nicht-Client-Bereich, die beginnen mit WM_NC…, vielleicht hilft z.B. WM_NCCALCSIZE.

Ansonsten gibt es Hook-Funktionen, die dir aus der Message-Queue die Messages holen. Üblicherweise werden Hooks in DLLs implementiert

Dafür sind 2 Funktionen notwendig:
Eine Init-Funktion ruft „SetWindowsHookEx“ auf, die die Hook setzt.
Für den jeweiligen Messagetyp muss man eine Funktion überschreiben, beispielsweise WH_KEYBOARD für Tastaturmessages.
Diese kann dann die Messages in einer eigenen Message-Queue(im Prinzip switch) verarbeiten. Soll die Message an das ursprüngliche Ziel weitergesendet werden, ruft man noch
CallNextHookEx auf.

Ein Beispiel dazu gibt es in der „Windows 98 Programmierbibel“ unter „DLLs“, die es bei www.terracom-online.de für ~30 DM gibt (Das Buch hat den Namen Bibel wirklich verdient, und hilft auch bei anderen Windows-Versionen)
Ansonsten in der MSDN-Hilfe nachschauen.

MfG Andrea