Frage

Ich mache eine Taskleiste, und ich muss wissen, wenn das aktive Fenster geändert wird. Ich möchte nicht, einen Timer verwenden. Ich denke, dass vielleicht gibt es eine WndProc Nachricht ist, kann ich abfangen.

Ich bin mit C #

War es hilfreich?

Lösung

Das erfordert einen Haken Satz von SetWindowsHookEx, WH_SHELL. Der Rückruf erhält Benachrichtigungen wie HSHELL_WINDOWACTIVATED und HSHELL_WINDOWCREATED, so dass Sie wissen, was mit den Top-Level-Fenster passiert. Überprüfen Sie das SDK Artikel aus für „ ShellProc "für die vollständige Liste der Benachrichtigungen können Sie erhalten. So gut wie alle von ihnen sind relevant für Ihre eigene Taskleiste zu implementieren.

Das war die gute Nachricht. Die schlechte Nachricht ist, dass WH_SHELL ein globaler Haken ist. Es erfordert eine DLL, die in einem anderen Prozess injiziert werden kann. Das Problem ist, können Sie nicht, dass die DLL in verwaltetem Code schreiben. Managed Code in einen nicht verwalteten Prozess injizierenden ist nicht möglich.

Zurück zur guten Nachrichten wieder hat jemand dieses Problem gelöst und hat eine nicht verwaltete DLL erstellt, die injizierbare und kann mit verwaltetem Code Interop. Das Projekt ist hier . Keine Ahnung, wie gut es ist. Ich vermute, dass es vielleicht nicht ganz UAC sicher sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top