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

时间:2009-10-27 20:37:14

标签: c# wpf interop console interprocess

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

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

1 个答案:

答案 0 :(得分:9)

您可以使用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应用程序。

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