Domanda

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 UserM.dll SendMessage. Tuttavia, non riesco a capire come ottenere l'app C # per RICEVERE i messaggi dall'app C.

Ho visto esempi di WinForms di sostituzione del metodo WndProc, ma non esiste un metodo WndProc da sovrascrivere in un'applicazione WPF o console. Sicuramente è possibile farlo almeno in un'applicazione Console. Giusto?

È stato utile?

Soluzione

Puoi farlo in WPF usando 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          
}

Sfortunatamente, non esiste un vero punto di riferimento 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 della GUI.

Esistono molti altri modi, meno strani, di fare comunicazione tra processi su Windows , tuttavia. Personalmente mi piace usare le pipe - la configurazione di named pipe funziona molto bene sia nel codice nativo che in quello gestito, ed è molto efficiente per la comunicazione tra i due programmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top