Закрытие процессов, представленных CheckedItems в c # - PullRequest
1 голос
/ 02 августа 2011

Я хочу закрыть процессы, которые пользователь выбирает в окне ListView в другой форме.поле ListView использует флажки для выбора, какие процессы закрывать.К сожалению, я не знаю, как преобразовать проверенные процессы в процессы .... любая помощь?

public void Form4_Load(object sender, EventArgs e)
{
    Process[] prs = Process.GetProcesses();
    listView1.Items.Clear();
    foreach (Process proces in prs)
    {
        if (!string.IsNullOrEmpty(proces.MainWindowTitle))
            listView1.Items.Add(proces.MainWindowTitle);
    }
    foreach (Process PRC in listView1.CheckedItems)
    {
        \\Idk what to put here.
    }

1 Ответ

0 голосов
/ 18 августа 2011

Чтобы убить процесс, вам нужно либо его имя, либо идентификатор процесса, поэтому измените приведенный выше код, который добавляет процесс к ListView1, примерно так:

private void Form4_Load(object sender, EventArgs e)
        {
            Process[] prs = Process.GetProcesses();
            listView1.Items.Clear();
            foreach (Process proces in prs)
            {
                if (!string.IsNullOrEmpty(proces.MainWindowTitle))
                {
                    ListViewItem item = new ListViewItem();
                    item.Tag = proces.Id; //it will be used to kill this process
                    item.Text = proces.MainWindowTitle;
                    listView1.Items.Add(item);
                }
            }
        }

Обратите внимание на поле тега, которое мы будем использовать позже для уничтожения выбранного процесса. Теперь переберите все выбранные ListViewItems, получите соответствующий идентификатор процесса из поля тега и получите ссылку на процесс, используя System.Diagnostics.Process.GetProcessById. Этот метод возвращает объект Process, который предоставляет метод Kill, с помощью которого можно остановить процесс, к которому относится этот объект.

private void button1_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem list in listView1.CheckedItems)
            {
                Process p = System.Diagnostics.Process.GetProcessById(Convert.ToInt32(list.Tag));
                if (p != null)
                    p.Kill();
            }
    }
...