在WPF或控制台C#应用程序中接收WM_COPYDATA结构体

7
我正在编写一个C#应用程序,需要与另一个使用本地C编写的应用程序通信。到目前为止,我已经找出了如何通过User32.dll SendMessage从我的C#应用程序向C应用程序发送消息。然而,我无法弄清楚如何让C#应用程序接收来自C应用程序的消息。
我已经看到过WinForms重写WndProc方法的示例,但在WPF或控制台应用程序中没有WndProc方法可重写。在控制台应用程序中至少可以做到吧?对吗?
1个回答

9

您可以在 WPF 中使用 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          
}

很遗憾,控制台应用程序没有真正的等效物。按照定义,Windows消息是通过窗口句柄(HWND)发送和接收的,因此它们确实是用于GUI应用程序的。

然而,在Windows上有许多其他不那么奇怪的方法可以进行进程间通信。我个人喜欢使用管道——在本机和托管代码中设置命名管道非常有效,并且对于两个程序之间的通信非常高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接