我正在尝试将参数发送到已经在处理器中的应用程序。 我正在使用Mutex来查找应用程序是否正在运行。 我需要发送任何命令行参数,并将文本添加到列表框。 但参数正在进入,但值不会被添加到列表框。 应用程序的名称是“MYAPPLICATION”,将值添加到列表框中的函数是parameters()
static class Program { /// <summary> /// The main entry point for the application. /// </summary> [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 Frm1 = new Form1(); bool createdNew = true; using (Mutex mutex = new Mutex(true, "MYAPPLICATION", out createdNew)) //Finding if application is running or not { if (createdNew) { //foreach (string abc in Environment.GetCommandLineArgs()) //{ // MessageBox.Show(abc); //} Application.Run(Frm1); } else { Process current = Process.GetCurrentProcess(); foreach (Process process in Process.GetProcessesByName(current.ProcessName)) { if (process.Id != current.Id) { SetForegroundWindow(process.MainWindowHandle); Frm1.parameters(Environment.GetCommandLineArgs()); break; } } } } }
最简单的和最可靠的方式发送其他应用程序的消息…是使用WM_COPY事件。 你可以通过一些老式的API调用来达到这个目的。
在Windows 7中仍然有效我们在最近的应用程序中实现了同样的功能,它在所有的Windows平台上都能够完美地工作。 (测试回到Windows XP,但在Windows 98中使用相同的API)
这里是一个codeproject的链接。
http://www.codeproject.com/KB/cs/ipc_wmcopy.aspx
本质上是在应用程序中注册一个窗口并将消息发送到该窗口。 然后你可以把它过滤到应用程序。
很酷,很有效率。 通过一些小工具,您可以使无限量的应用程序实例相互通信。
消息队列是进程间通信的常用模式。 Volure的这个版本很酷。 更常见的方法是使用MSMQ(Microsoft消息队列)。
看看这里
http://msdn.microsoft.com/en-us/library/ms978430.aspx
http://en.wikipedia.org/wiki/Microsoft_Message_Queuing
http://blog.goyello.com/2009/09/08/why-msmq-is-excelent-for-net-developers/