在 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
函数。另外,如果你要跨进程发送消息,你可能需要进行更多的权限检查和错误处理。