Question

J'écris une application C # qui doit communiquer avec une autre application écrite en C natif. Jusqu'à présent, j'ai compris comment envoyer des messages de mon application C # à l'application C avec User32.dll SendMessage. Cependant, je suis incapable de comprendre comment obtenir l'application C # pour recevoir des messages à partir de l'application C.

J'ai vu des exemples WinForms de substitution de la méthode WndProc, mais il n'existe aucune méthode WndProc à remplacer dans une application WPF ou console. Il est sûrement possible de le faire dans une application console au moins. Droit?

Était-ce utile?

La solution

Vous pouvez le faire dans WPF en utilisant 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          
}

Malheureusement, il n’ya pas de véritable équivalent pour une application console. Les messages Windows, par définition, sont envoyés et reçus par un handle de fenêtre (HWND), ils sont donc vraiment destinés à être utilisés avec des applications à interface graphique.

Il existe de nombreux autres moyens moins étranges de communication interprocessus sous Windows , cependant. Personnellement, j'aime bien utiliser les canaux. La configuration des canaux nommés fonctionne très bien dans le code natif et le code managé, et est très efficace pour la communication entre les deux programmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top