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

Posted

技术标签:

【中文标题】在 WPF 或控制台 C# 应用程序中接收 WM_COPYDATA 结构【英文标题】:Receive WM_COPYDATA struct in WPF or Console C# app 【发布时间】:2009-10-27 20:37:14 【问题描述】:

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

我已经看到了重写 WndProc 方法的 WinForms 示例,但是在 WPF 或控制台应用程序中没有要重写的 WndProc 方法。当然至少可以在控制台应用程序中进行。对吧?

【问题讨论】:

【参考方案1】:

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

不过,还有许多其他不那么奇怪的方法inter-process communication on Windows。我个人喜欢使用管道 - 设置命名管道在本机代码和托管代码中都非常有效,并且对于两个程序之间的通信非常有效。

【讨论】:

以上是关于在 WPF 或控制台 C# 应用程序中接收 WM_COPYDATA 结构的主要内容,如果未能解决你的问题,请参考以下文章

C# POst 接收或发送XML

WPF 或 Windows 窗体

在 Qt 应用程序中接收 WM_COPYDATA 消息

C# WPF 控制台管理器调试断言崩溃

C# WPF 根据数据更改 DataGrid 行(背景)颜色

在 C# 中通过 Telnet 发送和接收命令