关于进程的调用和参数传递 我写了一个C#程序,这个程序是由另外的程序调用的,并且会传递参数给它,这个程序只能在内存中存在一个,如果程序没有运行则启动它,如果程序已经在运行,则将程序置为当前在运行的程序,就像Excel一样,并且会得到最新参数,如何实现呢,希望高手给与提示. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前做COM的时候做过,大概就是 做个EXE型的COM服务器,在EXE中输出COM接口,其他的程序通过调用这个COM接口跟EXE交互 System.Diagnostics.Process.Start(@"要启动的程序路径", @"命令行参数, 以空格分开"); 比较简单...以上代码是启动程序并传入参数...然后在目标程序的Main方法中处理args参数数组就可以了(哪94您传入的)...如果程序已经启动, 哪也很好办, 直接用API->SendMessage通知一声比较方便...^o^ 这个问题我暂时解决,先判断进程 Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); Process[] ProcessAry = System.Diagnostics.Process.GetProcessesByName(currentProcess.ProcessName); IntPtr mainPtr; foreach (Process p in ProcessAry) { if (p.Id!=currentProcess.Id) { mainPtr = p.MainWindowHandle; byte[] bytes = System.Text.Encoding.UTF8.GetBytes(arg); int length = bytes.Length; COPYDATASTRUCT copyData = new COPYDATASTRUCT(); copyData.dwData = (IntPtr)1; copyData.lpData = arg; copyData.cbData = length + 1; User32.SendMessage(mainPtr, User32.WM_COPYDATA, 0, ref copyData); return; } }如果进程存在得到主窗体句柄,然后把得到的参数消息发送给窗体就可以了protected override void WndProc(ref Message m) { switch (m.Msg) { case User32.WM_COPYDATA: COPYDATASTRUCT copyData = new COPYDATASTRUCT(); copyData = (COPYDATASTRUCT)m.GetLParam(copyData.GetType()); AppGlobal.AnalysePara(copyData.lpData); if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal; this.Activate(); this.txtFoler.Text = AppGlobal.Folder; break; default: base.WndProc(ref m); break; } }然后就OK了 结帖 C# 如何在显示器屏幕上绘制直线? 如何引用本地的DLL文件 c# excel 添加艺术字体如何定位到某个单元格内 C#读取Dll文件报错。 一个问题一直没解决!大家帮忙看下 C#中查询数据库的图片怎么转为和在数据库中查询的图片一样。 新手请教一个很简单的问题,请大家帮忙,我没有分了,555555555555 我想图形化工作流定义,大家一起来讨论思路阿 c#treevies动态帮定acc两张表 升星~~发了两篇文章,欢迎指正~~ 如何解决“无法创建字段 student1 的子列表“这个问题? c#数组方面问题请教
大概就是 做个EXE型的COM服务器,在EXE中输出COM接口,其他的程序通过调用这个COM接口跟EXE交互
System.Diagnostics.Process.Start(@"要启动的程序路径", @"命令行参数, 以空格分开");
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
Process[] ProcessAry = System.Diagnostics.Process.GetProcessesByName(currentProcess.ProcessName); IntPtr mainPtr; foreach (Process p in ProcessAry)
{
if (p.Id!=currentProcess.Id)
{
mainPtr = p.MainWindowHandle; byte[] bytes = System.Text.Encoding.UTF8.GetBytes(arg);
int length = bytes.Length; COPYDATASTRUCT copyData = new COPYDATASTRUCT();
copyData.dwData = (IntPtr)1;
copyData.lpData = arg;
copyData.cbData = length + 1; User32.SendMessage(mainPtr, User32.WM_COPYDATA, 0, ref copyData);
return;
}
}如果进程存在得到主窗体句柄,然后把得到的参数消息发送给窗体就可以了
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case User32.WM_COPYDATA:
COPYDATASTRUCT copyData = new COPYDATASTRUCT();
copyData = (COPYDATASTRUCT)m.GetLParam(copyData.GetType());
AppGlobal.AnalysePara(copyData.lpData);
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
this.Activate();
this.txtFoler.Text = AppGlobal.Folder;
break;
default: base.WndProc(ref m);
break;
}
}
然后就OK了 结帖