我需要两个进程间通讯,这两个进程分别是两个窗体。但在收发数据的时候出现问题了。窗体A的代码如下:private void button4_Click(object sender, EventArgs e)
{
IntPtr hwndCalc = (IntPtr)0x0;
Process[] pros = Process.GetProcesses();
for (int i = 0; i < pros.Length; i++)
{
if (pros[i].ProcessName == "窗体B")
{
hwndCalc = pros[i].MainWindowHandle; }
}
//上面获得的句柄没有错。
string s="abcd";
byte[] tmp = System.Text.Encoding.Default.GetBytes(s);
IntPtr lpData = Marshal.AllocHGlobal(tmp.Length); Marshal.Copy(tmp, 0, lpData, tmp.Length);
SendMessage(hwndCalc, 0x74, 0,lpData);
}
窗体B的代码如下:protected override void DefWndProc(ref Message m)
{
if (m.Msg == 0x74)
{
byte[] tmp = new byte[4];
Marshal.Copy(m.LParam, tmp, 0, tmp.Length); string str = System.Text.Encoding.Default.GetString(tmp);
textBox1.Text = str;
}
base.DefWndProc(ref m);
}
问题,能接受到消息,但获取不到数据。主要在窗体B的这行代码Marshal.Copy(m.LParam, tmp, 0, tmp.Length);---------------获得都是{0,0,0,0}不管问题能不能解决,先谢谢大家!
{
IntPtr hwndCalc = (IntPtr)0x0;
Process[] pros = Process.GetProcesses();
for (int i = 0; i < pros.Length; i++)
{
if (pros[i].ProcessName == "窗体B")
{
hwndCalc = pros[i].MainWindowHandle; }
}
//上面获得的句柄没有错。
string s="abcd";
byte[] tmp = System.Text.Encoding.Default.GetBytes(s);
IntPtr lpData = Marshal.AllocHGlobal(tmp.Length); Marshal.Copy(tmp, 0, lpData, tmp.Length);
SendMessage(hwndCalc, 0x74, 0,lpData);
}
窗体B的代码如下:protected override void DefWndProc(ref Message m)
{
if (m.Msg == 0x74)
{
byte[] tmp = new byte[4];
Marshal.Copy(m.LParam, tmp, 0, tmp.Length); string str = System.Text.Encoding.Default.GetString(tmp);
textBox1.Text = str;
}
base.DefWndProc(ref m);
}
问题,能接受到消息,但获取不到数据。主要在窗体B的这行代码Marshal.Copy(m.LParam, tmp, 0, tmp.Length);---------------获得都是{0,0,0,0}不管问题能不能解决,先谢谢大家!
但是把代码“Marshal.Copy”放入窗体A中执行,却能够读取到正确的数据。
是否Marshal.Copy有进程限制??只能再同一个进程中?而不能获得另外进程的内存数据?