2009-05-28 16 views
2

Ich möchte die Funktionalität von System.Windows.Forms.Application.AddMessageFilter verwenden, aber meine Zielanwendung verwendet keine Windows Forms. Diese Funktion fügt einen Filter hinzu, um Windows-Nachrichten zu überwachen, während sie geroutet werden. Wenn jemand weiß, wie das funktioniert, hätte ich nichts dagegen, meinen eigenen Code zu schreiben, um die gleiche Funktion zu erfüllen.AddMessageFilter ohne Windows Forms?

SetWindowLong mit GWL_WNDPROC wirkt sich nur auf empfangene Nachrichten aus, und ich möchte gesendete Nachrichten beeinflussen. System.Windows.Forms.Application ist statisch, aber das Aufrufen von AddMessageFilter mit einem IMessageFilter, der eine Ausnahme auslöst, funktioniert nicht.

Antwort

2

Sie können einen Nachrichten-Hook verwenden, um zu erreichen, was Sie wollen. Tatsächlich ist ein Nachrichten-Hook viel mächtiger als IMessageFilter, da es andere Arten von Hooks als nur Windows-Nachrichten gibt, die an ein Fenster-Handle gesendet werden. Zum Beispiel können Sie systemweite Tastendrucke oder Mausbewegungen ausführen.

Lesen Sie diesen Artikel für weitere Informationen

http://msdn.microsoft.com/en-us/magazine/cc188966.aspx