Вход/Регистрация
Программирование КПК и смартфонов на .NET Compact Framework
вернуться

Климов Александр Петрович

Шрифт:

 SHCloseApps(int.MaxValue);

}

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

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

 }

}

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

Закрытие процесса

Чтобы закрыть процесс, используется метод

Kill
, код которого приведен в листинге 7.29.

Листинг 7.29

public void Kill {

 IntPtr hProcess;

 hProcess = OpenProcess(PROCESS_TERMINATE, false, (int) processId);

 if (hProcess != (IntPtr) INVALID_HANDLE_VALUE) {

bool bRet;

bRet = TerminateProcess(hProcess, 0);

CloseHandle(hProcess);

 }

}

Данный метод также использует вызовы функций Windows API. Функция

OpenProcess
получает дескриптор процесса, который затем передается функции
TerminateProcess
для уничтожения процесса.

Код, отвечающий за внешний вид элемента управления

ListView
, полностью идентичен коду из предыдущего примера, поэтому его можно просто скопировать и не рассматривать отдельно. Теперь с помощью Диспетчера задач пользователь сможет узнать список запущенных программ и процессов и даже управлять ими.

Маленький блокнот

Однажды мой друг, далекий от программирования, попросил меня написать простенький текстовый редактор для карманного компьютера. Его не совсем устраивало приложение Word Mobile, которое используется для работы с текстовыми файлами в операционной системе Windows Mobile. Заказчик хотел получить только основные функции стандартного Блокнота из Windows XP, то есть копирование, вырезание, вставку и удаление текста. Также он хотел обойтись без установки .NET Compact Framework 2.0, так как устаревшая модель его карманного компьютера обладала малой емкостью памяти.

  • Читать дальше
  • 1
  • ...
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: