C# winform 两个exe 通信 我不同解决方案下的两个exe,如:A.exe,B.exe,我需要两个程序互相通信?
比如在A.exe运行时,我采用了Process可以打开B.exe,在B里头我有一个TextBox1还有一个按钮,我打算实现输入TextBox1的内容后点击按钮,可以将信息...
比如在A.exe运行时,我采用了Process可以打开B.exe,在B里头我有一个TextBox1还有一个按钮,我打算实现输入TextBox1的内容后点击按钮,可以将信息传递给A里头的TextBox2,怎么做?多谢了。给一个实例,谢谢,我的邮箱:75314404@qq.com
A.exe代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Process p = new Process();p.StartInfo.FileName = "SEO.exe";p.Start();
}
}
}
SEO.exe(B.exe)
namespace SEO
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ 展开
A.exe代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Process p = new Process();p.StartInfo.FileName = "SEO.exe";p.Start();
}
}
}
SEO.exe(B.exe)
namespace SEO
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ 展开
4个回答
展开全部
这种写法你看一下
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;//指向数据的指针
}
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;//指向数据的指针
}
展开全部
获取B窗体的句柄,在A窗体通过SendMessage这个系统提供的API函数向B窗体发送消息。
或者有一个比较笨得方法,你用A窗体创建一个文件并将你需要在B窗体读取的信息写入,,在B窗体中去读取这个文件并获得指定的内容即可。
或者有一个比较笨得方法,你用A窗体创建一个文件并将你需要在B窗体读取的信息写入,,在B窗体中去读取这个文件并获得指定的内容即可。
追问
你的这个方式SendMessage能不能给详细一点的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实时的处理方式可以考虑在程序中使用消息机制,接收到特定的消息时触发事件。
追问
我就是不知道怎么写,道理我知道,我发代码一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的办法是:
点击B按钮,将需要传的值保存到Cookie(或session或数据库或文本中)
在a中设置Timer扫描,如果该cookie值改变,获取该值并显示
点击B按钮,将需要传的值保存到Cookie(或session或数据库或文本中)
在a中设置Timer扫描,如果该cookie值改变,获取该值并显示
追问
你的这个问题我考虑过了,不过消耗系统资源太大,而且会出现文件占用的可能。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询