Часть II. Объектно-ориентированное программирование
формат вывода прямо в аргументах метода
WriteLin()
. Здесь для разно-
образия форматирование выделено в отдельную позицию: сначала в
переменной
info
формируется форматная строка, которая затем под-
ставляется как аргумент в метод
WriteLin()
. Так как
GetProcesses()
выдает массив объектов, то массив можно сортировать, что и делается
запросом
Linq
, для этого подключено пространство имен
System.Linq
.
Вывод информации по процессу
Так как в предыдущем приложении мы вывели список процессов, то
теперь можно взять идентификатор любого процесса и выдать инфор-
мацию по нему, воспользовавшись методом
GetCurrentProcess()
. При-
ложение, реализующее эту задачу, показано в листинге 15.2, а результат
работы — на рис. 15.2.
Листинг 15.2
/* Created by SharpDevelop.
* User: user
* Date: 26.12.2012
* Time: 14:27
*
* To change this template use Tools | Options | Coding |
* Edit Standard Headers. */
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
namespace app71_GetProcId
{
class Program
{
static void EnumThreadsForPid (int pID)
{
Process theProc = null;
try
{
theProc = Process.GetProcessById(pID);
Console.WriteLine("Имя компьютера: {0}",
theProc.MachineName);
Глава 15. Некоторые сведения о процессах и потоках Windows
333
if(theProc.MachineName == ".")
Console.WriteLine("Имя компьютера: текущий");
}
catch(ArgumentException ex)
{ Console.WriteLine(ex.Message); }
}
public static void Main()
{
Console.WriteLine("Данные по конкретному " +
"запущенному процессу");
EnumThreadsForPid (1572);
Console.Read();
}
}
}
Рис. 15.2.
Определение имени компьютера по его идентификатору
Метод
GetProcessById()
выдает значение объекта класса
Process
. По-
этому можно получать значения элементов этого объекта. Мы взяли
один элемент — имя машины. Конкретное имя не выдалось, а выдалась
точка, как мы видели в листинге 15.1, означающая, что компьютер —
текущий. Переменной
theProc
сначала присваивается значение
null
,
чтобы потом в блоке
try{}
проконтролировать, присвоится ли настоя-
щая ссылка на процесс переменной
theProc
. Если это по каким-то при-
чинам не произойдет, сработает исключение с выдачей соответствую-
щего сообщения из класса исключения
ArgumentException
.
Потоки процесса
Рассмотрим теперь, как анализировать потоки заданного процесса.
В классе
Process
есть свойство
Threads
, которое содержит все потоки в
заданном процессе. Это свойство имеет тип
ProcessThreadCollection
,
334
Do'stlaringiz bilan baham: |