C# 中的进程间通信






3.51/5 (20投票s)
此应用程序演示了如何使用 WM_COPYDATA 在应用程序之间发送和接收消息。
引言
此应用程序演示了如何使用 WM_COPYDATA
在两个应用程序之间发送和接收消息。
有两个示例。一个是 testmessage 应用程序,另一个是 testMessage2 应用程序。testmessage 将检查并打开应用程序 2(如果它未运行),如果已运行,则会启动另一个具有不同窗口标题的实例。
- '发送' 按钮会将文本框中的文本发送到 testMessage2 应用程序。
- 接收到的数据将显示在文本框中。
Using the Code
数据交换是通过查找另一个应用程序(使用 FindWindow
)并将 WM_COPYDATA
消息发送到该窗口来执行的。
public static bool SendArgs(IntPtr targetHWnd, string args)
{
Win32.CopyDataStruct cds = new Win32.CopyDataStruct();
try
{
cds.cbData = (args.Length + 1) * 2;
cds.lpData = Win32.LocalAlloc(0x40, cds.cbData);
Marshal.Copy(args.ToCharArray(), 0, cds.lpData, args.Length);
cds.dwData = (IntPtr)1;
Win32.SendMessage(targetHWnd, Win32.WM_COPYDATA, IntPtr.Zero, ref cds);
}
finally
{
cds.Dispose();
}
return true;
}
protected override void WndProc(ref Message m){
switch(m.Msg){
case Win32.WM_COPYDATA:
Win32.CopyDataStruct st =
(Win32.CopyDataStruct)Marshal.PtrToStructure(m.LParam,
typeof(Win32.CopyDataStruct));
string strData = Marshal.PtrToStringUni(st.lpData);
txtmessagereceive.Text = strData;
break;
default:
// let the base class deal with it
base.WndProc(ref m);
break;
}
}
历史
- 2007 年 7 月 12 日:初始发布