这个其实用消息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); } 1.主程序调用子程序传参数: private void toolStripButton_ToolsManagement_Click(object sender, EventArgs e) { System.Diagnostics.ProcessStartInfo myStartInfo = new System.Diagnostics.ProcessStartInfo(); myStartInfo.FileName = ".\\ToolsManagement\\ToolsManagement.exe"; myStartInfo.Arguments = usercode + " " + usernme+" "+;//传参数 System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); myProcess.StartInfo = myStartInfo; myProcess.Start(); myProcess.WaitForExit(); //等待程序退出 } 2.子程序接收参数: 接受收据 应用程序的主入口点 program.cs [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Class.Class1.SetUserCode = args[0].Trim();Class.Class1.SetUserName = args[1].Trim(); Application.Run(new Form1()); }
两个.exe模块之间传值
最新推荐文章于 2023-11-23 16:58:15 发布