УЧЕБНЫЕ МАТЕРИАЛЫ ПО ПРОГРАММИРОВАНИЮ, КРЕКИНГУ, HTML, CSS, ОФИСНЫМ ПРИЛОЖЕНИЯМ
Поиск других процессов, выполняющихся в данный момент
ЗАДАЧА
Получить информацию о выполняющихся в данный момент процессах.
РЕШЕНИЕ
Используйте методы GetProcesses или
GetProcessesByName класса System.Diagnostics.Process.
ОБСУЖДЕНИЕ
Класс System.Diagnostics.Process представляет процесс Windows и включает множество свойств, подробно описанных в MSDN. Эта информация позволяет:
Кроме того, класс Process включает методы завершения процесса и событие Process.Exited, обработав которое, вы можете отреагировать на завершение другого процесса по любой причине.
Получить массив объектов Process, представляющих все выполняющиеся в данный момент процессы, позволяет метод Process.GetProcesses. Информацию о единственном процессе можно получить, вызвав метод Process.GetProcessesByName и передав в него имя процесса. Имя процесса обычно идентично имени исполняемого файла без расширения.
И метод GetProcesses, и метод GetProcessesByName имеют перегруженные версии, позволяющие указать имя компьютера. Эти версии можно использовать для получения информации о процессе, выполняющемся на другом компьютере. |
Ниже приведен код простого консольного приложения, сообщающего кое-какую информацию о собственном процессе. Замечу, что это только небольшая часть всей информации, доступной благодаря классу Process.
using System; using System.Diagnostics; namespace ProcessInfoTest { class Program { static void Main(string[] args) { Process Proc; Proc = Process.GetCurrentProcess(); Console.WriteLine("Start time: " + Proc.StartTime); Console.WriteLine("Memory use: " + Proc.PagedMemorySize64); Console.WriteLine("Number of thread: " + Proc.Threads.Count); Console.WriteLine("Executable file: " + Proc.MainModule.FileName); Console.WriteLine("Responding: " + Proc.Responding); // Отображение имен модулей, загруженных данным процессом Console.WriteLine("Loaded modules:"); foreach (ProcessModule ProcModule in Proc.Modules) { Console.WriteLine(" " + ProcModule.FileName); } } } }
При первом доступе к свойству объекта Process вся информация извлекается и кэшируется. Для обновления данных, хранимых в объекте Process, вызовите метод Process.Refresh.
Вот другое приложение, получающее полный список процессов и отображающее их в элементе управления DataGrid, применяя связывание с данными:
private void Form1_Load(object sender, EventArgs e) { dataGridView1.DataSource = Process.GetProcesses(); }
Вот сокращенный результат выполнения этого фрагмента:
При получении информации о привилегированном процессе возможна ошибка защиты. Вы можете перехватить се в своем коде при попытке доступа к свойству объекта Process. Однако, если вы выполняете связывание с данными для процесса с ограниченными правами, при переходе к соответствующей строке, когда элемент управления DataGrid попытается получить информацию для этого процесса, будет сгенерирована неперехватываемая ошибка. |
Используемая литература: