2009-10-27 11 views
6

Sto scrivendo un'applicazione C# che deve comunicare con un'altra applicazione scritta in nativo C. Finora ho capito come inviare messaggi dalla mia app C# all'app C con il User32.dll SendMessage. Tuttavia non sono in grado di capire come ottenere l'app C# per ricevere messaggi dall'app C.Ricevi la struttura WM_COPYDATA nell'app WPF o Console C#

Ho visto esempi WinForm di sovrascrivere il metodo WndProc, ma non esiste alcun metodo WndProc da sovrascrivere in un'applicazione WPF o Console. Sicuramente è possibile farlo in un'applicazione Console almeno. Destra?

risposta

8

si può fare questo in WPF utilizzando HwndSource.AddHook:

private HwndSource hwndSource; 
void MyWindowClass_Loaded(object sender, RoutedEventArgs e) 
{ 
    hwndSource = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle); 
    hwndSource.AddHook(new HwndSourceHook(WndProc)); 
} 
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    // Process your windows proc message here   
} 

Purtroppo, non esiste un vero equivelent per un'applicazione console. I messaggi di Windows, per definizione, vengono inviati e ricevuti da un handle di finestra (HWND), quindi sono pensati per essere utilizzati con le applicazioni GUI.

Ci sono molti altri, meno strani, mezzi per fare inter-process communication on Windows, tuttavia. Personalmente mi piace usare le pipe: la configurazione delle named pipe funziona molto bene sia nel codice nativo che in quello gestito ed è molto efficiente per la comunicazione tra i due programmi.

Problemi correlati