.NET 3.x mini-FAQ по получению и убиванию процессов. - C#
Формулировка задачи:
Всем привет. Эту маленькую статью я пишу для таких новиков как я, поэтому профи, пожалуйста, не пишите типо "это и так все знают"!
Вот небольшие кодики с маленькими пояснениями. Пищу с мобилы(ну как обычно) так что ошибки синтаксиса могут быть. Если что либо не работает пишите!
Сначала в прогу необходимо добавить пространстово имен:
и добавьте листбокс. Вот пример получения процессов
Вот обработчик "убития" при выборе из списка
Следующий код автоматически убивает по имени
Ну и самое по мне интересное. Получение оконных процессов//правда я этот кусок незапускал, а просто наткнулся в инете.Прошу помидорами некидать!)
Понимаю что комментариев нету, но с мобилы много не напишешь, да и код вроде простой...
using system.diagnostic
Process[] pr; pr=process.getprocess(); foreach(Process proc in pr)// извиняйте фигурных скобок на мобиле нету... (Listbox1.items.add(proc.processname);)
pr[listbox1.selectedindicies[0].kill()] // ошибка может быть в квадратных скобках перед килл()
foreach()//не стал писать, тут тоже самое ( If(proc.processname.tolower=="name") (proc.kill(); Proc.waitforexit(); Break; ) )
Foreach(Process p in Process.GetProcesses(system.environment.MachineName)) (if (p.MainWindowHandle != IntPtr.Zero) (listbox1.items.add(p.tostring()); ) )
Решение задачи: «.NET 3.x mini-FAQ по получению и убиванию процессов.»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics; //Вот это пространство имён нужно добавить.
namespace WindowsFormsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//свойство добавляемого объекта, которое будет отображаться
//в списке в виде текста (как-то так)
this.listBox1.ValueMember = "ProcessName";
}
private void btnGetProcesses_Click(object sender, EventArgs e)
{
Process[] pr = Process.GetProcesses(); //Всё в массиве список процессов
foreach (Process proc in pr) //Это уже добавление списка процессов в ListBox с именем listBox1
listBox1.Items.Add(proc); //Добавляем в список объект.
//Но отображено будет название процесса, так как у listBox1 свойство ValueMember == "ProcessName"
}
private void btnDelSelected_Click(object sender, EventArgs e)
{
//Так как в список был добавлен экземпляр класса Process, то получаем к нему доступ через
//SelectedItem, который возвращает тип Object. Так как любой класс наследует от Object,
//то соответственно Item может ссылаться на любой объект класса. Мы добавляли в listBox1
//(listBox1.Items.Add(proc);) экземпляр класса Process. Поэтому приводим к типу Process
//В listBox1 должен быть выделен элемент
((Process)listBox1.SelectedItem).Kill();
//Можно упростить строку выше для понимания новичком
//Process proc = (Process)listBox1.SelectedItem;
//proc.Kill();
//Это одно и тоже по сути
}
private void btnKillSkype_Click(object sender, EventArgs e)
{
foreach (Process proc in listBox1.Items)
{
if (proc.ProcessName == "Skype")
{
proc.Kill();
proc.WaitForExit();
break; //например надо убить много процессов с одним именем. Значит убираем break
}
}
}
private void btnGetWinProc_Click(object sender, EventArgs e)
{
//Тут походу получить процессы те, окна которых не скрыты. (не факт, но вроде так)
foreach (Process p in Process.GetProcesses(Environment.MachineName))
{
if (p.MainWindowHandle != IntPtr.Zero)
listBox1.Items.Add(p);
}
}
}
}