
这种写法你看一下
const int WM_COPYDATA = 0x004A;
[DllImport("User32dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
ref COPYDATASTRUCT lParam // second message parameter
);
[DllImport("User32dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string
lpWindowName);
private void button1_Click(object sender, EventArgs e)
{
int WINDOW_HANDLER = FindWindow(null, "指南针优化软件");
if (WINDOW_HANDLER == 0)
{
Process p = new Process();
pStartInfoFileName = ApplicationStartupPath + "\\\\ZNZexe";
pStart();
ApplicationExit();
}
else
{
byte[] sarr = SystemTextEncodingDefaultGetBytes(thistextBox1Text);
int len = sarrLength;
COPYDATASTRUCT cds;
cdsdwData = (IntPtr)100;
cdslpData = thistextBox1Text;
cdscbData = len + 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;//用户定义数据
public int cbData;//数据大小
[MarshalAs(UnmanagedTypeLPStr)]
public string lpData;//指向数据的指针
}
WinForm窗体自带了WndProc函数用来处理消息。窗体句柄可以用thisHandle来获得。你的SendMessage直接向窗体句柄发消息应该能被捕获到。
最后,因为WinForm窗体自带了WndProc函数,这里又来一个WndProc函数,大概会被认为了重写,所以窗体消息会发到你这来。
简单的做法:
向DLL注册句柄。
重载WndProc函数。在里面判断。
以上就是关于C# winform 两个exe 通信 我不同解决方案下的两个exe,如:A.exe,B.exe,我需要两个程序互相通信全部的内容,包括:C# winform 两个exe 通信 我不同解决方案下的两个exe,如:A.exe,B.exe,我需要两个程序互相通信、C#如何接收C++dll发送的消息、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)