Перечисление процессов
Перечисление процессов
Для отображения списка процессов используется функция, код которой приведен в листинге 7.27.
Листинг 7.27
private void fillProcessList() {
Cursor.Current = Cursors.WaitCursor;
// Получаем список запущенных процессов
processes = Process.GetProcesses();
// Заполняем ListView
ListViewItem lvi;
listView.BeginUpdate();
listView.Items.Clear();
foreach (Process p in processes) {
lvi = new ListViewItem(p.ProcessName);
//lvi.SubItems.Add("ID");
listView.Items.Add(lvi);
}
listView.EndUpdate();
if (listView.Items.Count > 0) {
listView.Items[0].Selected = true;
listView.Items[0].Focused = true;
}
Cursor.Current = Cursors.Default;
}
Список активных процессов извлекается при помощи класса Process. Основой класса является метод GetProcesses, приведенный в листинге 7.28.
Листинг 7.28
public static Process[] GetProcesses() {
ArrayList procList = new ArrayList();
IntPtr handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if ((int)handle > 0) {
try {
PROCESSENTRY32 peCurrent;
PROCESSENTRY32 pe32 = new PROCESSENTRY32();
byte[] peBytes = pe32.ToByteArray();
int retval = Process32First(handle, peBytes);
while(retval == 1) {
peCurrent = new PROCESSENTRY32(peBytes);
Process proc =
new Process(new IntPtr((int)peCurrent.PID), peCurrent.Name,
(int)peCurrent.ThreadCount, (int)peCurrent.BaseAddress);
procList.Add(proc);
retval = Process32Next(handle, peBytes);
}
} catch(Exception ex) {
throw new Exception("Exception: " + ex.Message);
}
CloseToolhelp32Snapshot(handle);
return (Process[])procList.ToArray(typeof(Process));
} else {
throw new Exception("Unable to get processes!");
}
}
С помощью данного метода можно узнать детальную информацию о каждом процессе.