C# winform 两个exe 通信 我不同解决方案下的两个exe,如:A.exe,B.exe,我需要两个程序互相通信?

2024-12-18 23:56:44
推荐回答(4个)
回答1:

这种写法你看一下

const int WM_COPYDATA = 0x004A;

[DllImport("User32.dll", 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("User32.dll", 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();
p.StartInfo.FileName = Application.StartupPath + "\\..\\ZNZ.exe";
p.Start();
Application.Exit();
}
else
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(this.textBox1.Text);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = this.textBox1.Text;
cds.cbData = len + 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
}

public struct COPYDATASTRUCT
{
public IntPtr dwData;//用户定义数据
public int cbData;//数据大小
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;//指向数据的指针
}

回答2:

获取B窗体的句柄,在A窗体通过SendMessage这个系统提供的API函数向B窗体发送消息。
或者有一个比较笨得方法,你用A窗体创建一个文件并将你需要在B窗体读取的信息写入,,在B窗体中去读取这个文件并获得指定的内容即可。

回答3:

实时的处理方式可以考虑在程序中使用消息机制,接收到特定的消息时触发事件。

回答4:

最简单的办法是:
点击B按钮,将需要传的值保存到Cookie(或session或数据库或文本中)
在a中设置Timer扫描,如果该cookie值改变,获取该值并显示