Frage

Ich möchte einen Antrag stellen alle UI-Ereignisse in allen Formen meiner Anwendung abzufangen und sie in ein Protokoll zu schreiben. Diese Daten können als verwendet werden, um zu sehen, welche Kontrollen am meisten verwendet werden, in welcher Reihenfolge, usw. Das Problem ist, dass ich dies automatisch geschehen soll, ohne die vorhandenen Klassen zu verändern.

Ich habe einen Prototyp, ein Verfahren zu einem Click-Ereignisse für alle Steuerelemente in einem Formular legt, aber wie kann dies für alle Formen getan werden? Reflexion braucht ein Zielobjekt, wenn Ereignisse zu manipulieren, sondern nur das Startformular leicht zugegriffen werden kann.

Gibt es eine Möglichkeit, den Konstruktor ein Objekt Haken? Dann könnte ich „Inject“ meine Methode in allen Ereignissen der neuen Form. Oder vielleicht gibt es einen anderen Weg, dies zu tun.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

können Sie installieren einen Nachrichtenfilter .

Ein Nachrichtenfilter ist ein Objekt, das implementiert IMessageFilter. WinForms ruft Ihre PreFilterMessage Methode für jede Nachricht, die Ihre Threads Nachrichtenschleife durchlaufen. Das ist genug, um eine Benutzereingabe über die Anwendung (und gibt Ihnen die Möglichkeit der Manipulation it).

zu überwachen

Andere Tipps

In Windows-API wird dies mit lokalen Haken gemacht (Sie können lokale Maus Haken setzen mit SetWindowsHookEx -Funktion). Dies ist der richtige Weg, um Ihre Aufgabe zu tun. In C # müssen Sie P / Invoke zu erhalten, um den Zugang zu SetWindowsHookEx verwenden.

Eine weitere Aufgabe wäre es, die HWND (Fenster Griff) übereinstimmen WinForms Kontrolle zu entsprechen. Lesen Sie dieser Artikel , wie diese (via WM_GETCONTROLNAME Nachricht) zu tun.

Siehe auch diese Frage , die a Duplikat von Ihnen.

Sie sollten fähig sein, zu erreichen, was Sie mit Nachrichtenfilter wollen - keine direkte P / Invoke auf Win32-APIs erforderlich

Sehen Sie die Hilfe auf dem IMessageFilter Schnittstelle für weitere Informationen.

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