using System.Runtime.InteropServices;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hwnd, int msg, int wParam, ref COPYDATASTRUCT lParam);
public const int WM_COPYDATA = 0x004A;
/// <summary>
/// WM_COPYDATA消息,进程间传输信息专用结构
/// </summary>
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
}
发送方代码:
private void button1_Click(object sender, EventArgs e)
{
//string ClassName = "WindowsForms10.Window.8.app.0.3ee13a2_r13_ad1";
string ClassName = "WindowsForms10.Window.8.app.0.b7ab7b_r13_ad1";
string FormText = "WMSGReceiver";
IntPtr hdl = FindWindow(ClassName, FormText);
if (hdl != IntPtr.Zero)
{
string msg = "asdf";
byte[] sarr = Encoding.Default.GetBytes(msg);
COPYDATASTRUCT cds;
cds.dwData = IntPtr.Zero; //可以是任意值
cds.cbData = sarr.Length + 1; //指定lpData内存区域的字节数
cds.lpData = msg; //发送给目标窗口所在进程的数据
SendMessage(hdl, WM_COPYDATA, 0, ref cds);
}
}
接收方代码:
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WmHelper.WM_COPYDATA:
InvByScannCode(ref m);
break;
default:
base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
break;
}
}
private void InvByScannCode(ref System.Windows.Forms.Message m)
{
COPYDATASTRUCT cdata = new COPYDATASTRUCT();
Type mytype = cdata.GetType();
cdata = (COPYDATASTRUCT)m.GetLParam(mytype);
string Text = cdata.lpData;
...
}