【问题标题】:Send parameters to a running application in C#在 C# 中向正在运行的应用程序发送参数
【发布时间】:2011-11-23 06:26:21
【问题描述】:

我正在尝试将参数发送到已在处理器中的应用程序。我正在使用 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;
                    }
                }
            }
        }
    }

【问题讨论】:

标签: c# windows mutex command-line-arguments


【解决方案1】:

向其他应用程序发送消息的最简单且对我来说最可靠的方法...是使用 WM_COPY 事件。您可以通过一些老式 API 调用来解决此问题。

在 Windows 7 中仍然有效 我们在最近的一个应用程序中实现了同样的功能,它在所有 Windows 平台上都能完美运行。 (测试回到 windows xp,但在 windows 98 中使用相同的 api)

这里是代码项目的链接。

http://www.codeproject.com/KB/cs/ipc_wmcopy.aspx

本质上是在应用程序中注册一个窗口并将消息发送到该窗口。然后您可以将其过滤到应用程序中。

非常酷,而且非常高效。借助一些工具,您可以使无限数量的应用程序实例相互通信。

【讨论】:

    【解决方案2】:

    消息队列是进程间通信的常用模式。 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/

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多