Книга: Программирование КПК и смартфонов на .NET Compact Framework

Перечисление процессов

Перечисление процессов

Для отображения списка процессов используется функция, код которой приведен в листинге 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!");
 }
}

С помощью данного метода можно узнать детальную информацию о каждом процессе.

Оглавление книги


Генерация: 0.038. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз