2010-11-19 3 views
2

Wie kann ich Nachrichten für alle Fenster von einem zentralen Ort in meiner Anwendung (winforms) abfangen. Ich brauche einen zentralen Platz in meiner Anwendung (z. B. programm.cs oder Mainform), der auf jede Erstellung oder Alternative jede Präsentation (WM_FORMSHOW 0x18) eines Formulars reagieren kann. Formulare werden von anderen Entwicklern, AddIns, verteilt, aber sie werden in der Standard-App-Domäne aktiviert. Obwohl die Aktivierung in einer anderen Appdomain ebenfalls ein interessanter Fall wäre.Wie überwacht man Nachrichten, die an die Anwendung oder an winform gesendet werden?

das Enviroment ist .Net 3.5 oder 4 und C#.

danke

Antwort

1

Sie abfangen können Windows-Nachrichten durch eine IMessageFilter erstellen und sie an die Anwendung über Application.AddMessageFilter hinzufügen.

In Ihrem IMessageFilter Implementierungsklasse, implementieren Sie PreFilterMessage, wo Sie suchen können, was Sie wollen - es übergeben wird eine Message, die die gleichen Daten ein C-Stil Fenster Nachrichtenschleife erhalten würde enthält. Beachten Sie, dass Sie bei Bedarf auch ein IMessageFilter zu einem bestimmten Formular hinzufügen können, ebenso wie die gesamte Anwendungsnachrichtenschleife.

+0

Mit Application.AddMessageFilter scheinen nicht alle Nachrichten verfügbar zu sein, besonders nicht "WM_SHOWWINDOW 0x0018" – wolle

+0

Ich habe Zugriff auf WM_SHOWWINDOW 0x0018 beim Überschreiben von WndProc (ref Nachricht m). Aber das ist eine Methode der Form und gibt mir Zugriff auf die Nachricht nur, wenn es von diesem Formular behandelt wird. Leider sind die Formulare Teil von Addins und ich habe keinen Zugriff auf ihren Code, um diese Methode zu überschreiben – wolle