2012-04-02 10 views
0

ich diesen Code in C# .NET-Anwendung geschrieben habe, für Nachrichten-Tracking ...Wie Fensterhandle an Wndproc übergeben?

protected override void WndProc(ref Message m) 
{ 
    // Listen for operating system messages. 
    switch (m.Msg) 
    { 
     case WM_CHAR: 
       FileStream fs = new FileStream("d:/Type.txt",FileMode.Append,FileAccess.Write); 
       //set up a streamwriter for adding text 
       StreamWriter sw = new StreamWriter(fs);      
       sw.BaseStream.Seek(0, SeekOrigin.End);      
       int no=(int)m.WParam; 
       sw.Write(Convert.ToChar(no));       
       sw.Flush(); 
       sw.Close(); 

       break; 
    } 
    base.WndProc(ref m); 
} 

Ich mag Nachrichten für verschiedene Fenster verfolgen, so wie kann ich verschiedenen Fenstergriff WNDPROC passieren? Bitte helfen Sie mir ...

Antwort

1

Sie würden globale Tastatur-Hook registrieren müssen, anstatt verschiedenen Griff vorbei. This Artikel zeigt, wie das geht. Grundgedanke dahinter ist, dass Sie Ihre Funktion für das Abfragen aller Tastatur-bezogenen Systemereignisse (für jede Nachricht) registrieren und nur diejenigen ausfiltern, die Sie benötigen.

Die Funktionalität wird mit SetWindowsHookEx winapi-Funktion erzielt.

0

Sie können alle Nachrichten in der Anwendung filtern, indem Application.AddMessageFilter(IMessageFilter filter) am Anfang des Programms aufrufen.

Die IMessageFilter Schnittstelle hat nur eine Methode:

bool PreFilterMessage(ref Message m); 

, dass für jede Nachricht, die von der Anwendung behandelt aufgerufen wird. Dort können Sie m.HWnd verwenden, um die verschiedenen Fenster Ihres Programms zu identifizieren.

+0

Eigentlich mag ich Nachrichten von jedem aktiven Fenster verfolgen. Gibt es einen Weg dazu? – user1304843

+0

Windows, die zu anderen Anwendungen gehören? Dann brauchen Sie einen globalen Haken, wie Dmitriy Reznik in seiner Antwort sagte. – rodrigo

+0

gibt es eine Alternative oder wie man es benutzt? – user1304843