C# Winform 多进程窗体间传值->SendMessage()

在 C# 的 Windows Forms 中,使用 Windows API 的 SendMessage 方法可以实现窗口间的消息通传递,当然也可以在不同的进程之间发送消息。接下来,我将为您提供一个基本的示例,演示如何使用 SendMessage 以及如何重写 WndProc 方法来接收并处理消息。

首先,你需要添加对Windows API的引用:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

SendMessage API 函数的参数如下:

  • hWnd:要接收消息的窗口的句柄。
  • Msg:指定发送的消息。
  • wParam:指定附加的消息特定信息。
  • lParam:指定附加的消息特定信息。

你可以定义自己的消息:

const int WM_MYMSG = 0x8000; // 用户自定义消息

然后你可以使用 SendMessage 向特定窗口发送消息:

// 获取目标窗口句柄,假设窗口的名字为 "targetWindowName"
IntPtr hWnd = FindWindow(null, "targetWindowName");
if (hWnd != IntPtr.Zero) {
    // 向目标窗口发送消息
    SendMessage(hWnd, WM_MYMSG, IntPtr.Zero, IntPtr.Zero);
}

接收消息并处理,你需要重写窗口的 WndProc 方法:

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    if (m.Msg == WM_MYMSG) {
        // 处理消息
        MessageBox.Show("接收到自定义消息");
    }
}

请注意,SendMessage 是一个阻塞函数,它将等待目标窗口处理完消息才会返回。如果你希望函数发送消息后立即返回,你可以使用 PostMessage 函数。另外,如果你要跨进程发送消息,你可能需要进行更多的权限检查和错误处理。

你可能感兴趣的:(winform,c#,winform)