示例#1
0
        /*метод, запускающий процесс на сиполнение и
         * сохраняющий объект, который его описывает*/
        void RunProcess(string AssamblyName)
        {
            //запускаем процесс на соновании ичполняемого файла
            Process proc = Process.Start(AssamblyName);

            //добавляем процесс в список
            Processes.Add(proc);

            /*проверяем, стал ли созданный процесс дочерним,
             * по отношению к текущему и, если стал, выводим MessageBox*/
            if (Process.GetCurrentProcess().Id == GetParentProcessId(proc.Id))
            {
                MessageBox.Show(proc.ProcessName +
                                " действительно дочерний процесс текущего процесса!");
            }
            /*указываем, что процесс должен генерировать собития*/
            proc.EnableRaisingEvents = true;
            //добавляем обработчик на событие завершения процесса
            proc.Exited += proc_Exited;
            /*устанавливаем новый текст главному окну дочернего процесса*/
            SetChildWindowText(proc.MainWindowHandle, "Chils process #" + (++Counter));

            /*проверяем, запускали ли мы экземпляр такого приложения
             * и, елси нет, то добавляем в список запущенных приложений*/
            StartedAssemblies.Invoke((Action) delegate() {
                if (!StartedAssemblies.Items.Contains(proc.ProcessName))
                {
                    StartedAssemblies.Items.Add(proc.ProcessName);
                }
            });
            /*убираем приложение из списка лдоступных приложений*/
            AvailableAssemblies.Invoke((Action) delegate() {
                AvailableAssemblies.Items.Remove(AvailableAssemblies.SelectedItem);
            });
        }
示例#2
0
        /*обработчик события нажания на кнопку Refresh основного диалога*/
        private void Refresh_Click(object sender, EventArgs e)
        {
            string temp = null;

            StartedAssemblies.Invoke((Action) delegate() { temp = StartedAssemblies.SelectedItem.ToString(); });
            ExecuteOnProcessesByName(temp, Refresh);
        }
示例#3
0
        /*обработчик события нажания на кнопку Close основного диалога*/
        private void CloseWindowButton_Click(object sender, EventArgs e)
        {
            string temp = null;

            StartedAssemblies.Invoke((Action) delegate() { temp = StartedAssemblies.SelectedItem.ToString(); });
            ExecuteOnProcessesByName(temp, CloseMainWindow);
            StartedAssemblies.Invoke((Action) delegate() {
                StartedAssemblies.Items.Remove(StartedAssemblies.SelectedItem);
            });
        }
示例#4
0
        /*обработчик события Exited класса Process*/
        void proc_Exited(object sender, EventArgs e)
        {
            Process proc = sender as Process;

            //убираем процесс из списка запущенных приложений
            StartedAssemblies.Invoke((Action) delegate() { StartedAssemblies.Items.Remove(proc.ProcessName); });
            //добавляем процесс в список доступных приложений
            AvailableAssemblies.Invoke((Action) delegate() { AvailableAssemblies.Items.Add(proc.ProcessName); });
            //убираем процесс из списка дочерних процессов
            Processes.Remove(proc);
            //уменьшаем счётчик дочерних процессов на 1
            Counter--;
            int index = 0;

            /*меняем текст для главных окон всех дочерних процессов*/
            foreach (var p in Processes)
            {
                SetChildWindowText(p.MainWindowHandle, "Child process #" + ++index);
            }
        }