在WPF或Console C#app中接收WM_COPYDATA结构

我正在编写一个C#应用程序,需要与用本机C编写的另一个应用程序进行通信。到目前为止,我已经想出了如何使用User32.dll SendMessage将消息从我的C#应用​​程序发送到C应用程序。 但是,我无法弄清楚如何让C#应用程序从C应用程序接收消息。

我已经看到了覆盖WndProc方法的WinForms示例,但是在WPF或Console应用程序中没有要覆盖的WndProc方法。 当然,至少可以在控制台应用程序中执行此操作。 对?

您可以使用HwndSource.AddHook在WPF中执行此操作:

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 } 

不幸的是,控制台应用程序没有真正的平等。 根据定义,Windows消息由窗口句柄(HWND)发送和接收,因此它们实际上是用于GUI应用程序。

然而, 在Windows上进行进程间通信还有许多其他的,不那么奇怪的方法 。 我个人喜欢使用管道 – 设置命名管道在本机代码和托管代码中都能很好地工作,并且在两个程序之间进行通信非常有效。