您的位置:首页 > 编程语言 > C#

Winform跨程序发送、接收消息

2016-07-16 16:39 387 查看
看到论坛上一个问题:程序已经在运行,再次运行时,要向前一个实例发送一些消息。

简单的写了一些,直接贴代码!

1、封装了一个类,用于发送信息

class Note
{
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref CopyData lParam);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
//定义消息常数
public const int WM_COPYDATA = 0x004A;
public struct CopyData
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
public static bool SendMsg(string MSG)
{
var hwnd = FindWindow(null, "MainForm");
if (hwnd == IntPtr.Zero)
{
return false;
}
CopyData data;
data.dwData = IntPtr.Zero;
data.lpData = MSG;
data.cbData = Encoding.Default.GetBytes(data.lpData).Length + 1;
SendMessage(hwnd, WM_COPYDATA, 0, ref data);
return true;
}
}

2、在MainForm里override了WndProc,用于接收消息

protected override void WndProc(ref Message m)
{
if (m.Msg == Note.WM_COPYDATA)
{
string s = ((Note.CopyData)Marshal.PtrToStructure(m.LParam, typeof(Note.CopyData))).lpData;
MessageBox.Show(s);
}
else
base.WndProc(ref m);
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# Winform 自定义消息