gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:15:23 26 4
gpt4 key购买 nike

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

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

最佳答案

您可以在 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 , 然而。我个人喜欢使用管道 - 设置命名管道在 native 代码和托管代码中都非常有效,并且对于两个程序之间的通信非常有效。

关于c# - 在 WPF 或控制台 C# 应用程序中接收 WM_COPYDATA 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com