C# winform 两个不同程序(exe)频繁交互传值
展开全部
这个其实用消息SendMessageEx的话最为简单, 提示个思路
A程序可以通过B程序的名称获取到钩子ProcessID,得到句柄,发送消息 send +参数 到B , B重写 DefWndProc消息方法, 捕获send事件 进行处理 ,(这个时间 可以让界面有一系列的反应) . B处理完成后, 按同样的方法把结果发送给A
两段关键代码
//重写消息
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
//mystr:参数
default:
base.DefWndProc(ref m);
break;
}
}
//发送消息
private static void Send(IntPtr hwid, string str)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(str);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = str;
cds.cbData = len + 1;
SendMessage(hwid, WM_COPYDATA, 0, ref cds);
}
A程序可以通过B程序的名称获取到钩子ProcessID,得到句柄,发送消息 send +参数 到B , B重写 DefWndProc消息方法, 捕获send事件 进行处理 ,(这个时间 可以让界面有一系列的反应) . B处理完成后, 按同样的方法把结果发送给A
两段关键代码
//重写消息
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
//mystr:参数
default:
base.DefWndProc(ref m);
break;
}
}
//发送消息
private static void Send(IntPtr hwid, string str)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(str);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = str;
cds.cbData = len + 1;
SendMessage(hwid, WM_COPYDATA, 0, ref cds);
}
展开全部
高难度动作,
程序没关联。
通过中间文档进行通信,,
1.A 点击Button 对XML或TXT写入 操作表示 比如说“ACTION” 写入到ACTION.TXT文件
2.B程序 定时执行 每1秒读一次 ACTION.TXT 文件 发现 “ACTION”是 执行操作,将结果返回到ACTION.TXT 文档,
3.A程序从ACTION.TXT文档读取 结果,,具体是定时 还是间隔随便了,
程序没关联。
通过中间文档进行通信,,
1.A 点击Button 对XML或TXT写入 操作表示 比如说“ACTION” 写入到ACTION.TXT文件
2.B程序 定时执行 每1秒读一次 ACTION.TXT 文件 发现 “ACTION”是 执行操作,将结果返回到ACTION.TXT 文档,
3.A程序从ACTION.TXT文档读取 结果,,具体是定时 还是间隔随便了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很明白,百度hi我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询