Im folgenden Beispiel wir die bestehende WndProc-Funktion der Basis-Fensterklasse überschrieben, um die Auswertung von Windows-Messages zu ermöglichen. Es werden beispielhaft drei verschiedene Messages ausgewertet (WM_MYOWNMESSAGE, WM_ACTIVATEAPP, WM_COPYDATA) um unterschiedliche Funktionen zu demonstrieren. Siehe auch folgenden Beitrag: Link
using System.Runtime.InteropServices; // eigene Message definieren (sowohl auf Sender- als auch Empfängerseite) private const int WM_MYOWNMESSAGE = 11111; /// <summary> /// Struct für die Stringübergabe an andere Fenster /// </summary> public struct SCopyData { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } // Funktion zur Behandlung eingehender Messages für ein Fenster // dazu WndProc der Fenster-Basisklasse überschreiben [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] protected override void WndProc(ref Message m) { switch (m.Msg) { // eigene Message auswerten, in LParam ist z.B. ein int-Wert case WM_MYOWNMESSAGE: Console.WriteLine("Messagedaten empfangen: {0}", (int)m.LParam); break; // WM_ACTIVATEAPP tritt auf, wenn das Fenster aktiviert/deaktiviert wird case WM_ACTIVATEAPP: if ((int)m.WParam == 0) { // m.WParam == 0 -> Fenster wurde deaktiviert Console.WriteLine("Fenster wurde deaktiviert."); } else { // m.WParam == 1 -> Fenster wurde aktiviert Console.WriteLine("Fenster wurde aktiviert."); } break; // bei WM_COPYDATA können Structe über Windows-Messages // versendet werden, die Strings enthalten case WM_COPYDATA: // Struct aus LParam extrahieren SCopyData cds = (SCopyData)m.GetLParam(typeof(SCopyData)); // übergebenen String ausgeben Console.WriteLine("String per Windows-Message empfangen: " + cds.lpData); break; } // abschließend noch die Funktion der Basisklasse aufrufen base.WndProc(ref m); }