Отправка параметров в работающее приложение на C # - PullRequest
2 голосов
/ 23 сентября 2011

Я пытаюсь отправить параметры в приложение, которое уже находится в процессоре.Я использую Mutex, чтобы узнать, запущено приложение или нет.Мне нужно отправить любой параметр командной строки, и этот текст будет добавлен в список.Но параметр входит, но значения не добавляются в список.Имя приложения - "MYAPPLICATION", а функция, которая добавляет значение в список, - параметры ()

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;
                    }
                }
            }
        }
    }

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Самый простой и для меня самый надежный способ отправить сообщение другим приложениям ... это использовать событие WM_COPY.Вы можете сделать это с помощью некоторых вызовов API старой школы.

Все еще действует в Windows 7 Мы реализовали то же самое в недавнем приложении, и оно работает безупречно на всех платформах Windows.(проверено в Windows XP, но в Windows 98 используется тот же API-интерфейс)

Вот ссылка на кодпроект.

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

По существу зарегистрируйте окно вприложения и отправлять сообщения в это окно.Затем вы можете отфильтровать его до приложений.

Довольно круто и довольно эффективно.С помощью небольшого набора инструментов вы можете устанавливать неограниченное количество экземпляров приложения для связи друг с другом.

0 голосов
/ 23 сентября 2011

Очередь сообщений - это общий шаблон связи между процессами.Версия Volure это круто.Более распространенным подходом является использование MSMQ (Microsoft Message Queuing).

Проверьте это здесь

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/

...