понедельник, 20 октября 2008 г.

Кусочки: Получение информации о выполняющихся процессах

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

В Windows 95/98/2000/xp/nt код может выглядеть следующим образом: 

function GetProcessesWin95(var Proc: TProcArray):Integer;

var
FSnap: THandle;
PE: TProcessEntry32;
PPE: PProcessEntry32;
I: Integer;
begin
If FSnap > 0 then CloseHandle(FSnap);
FSnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PE.dwSize:=SizeOf(PE);
I:=0;
SetLength(Proc,1000); // заведомо большой массив
If Process32First(FSnap,PE) then
  repeat
  New(PPE);
  PPE^:=PE;
  Proc[I]:=PPE.szExeFile;
  I:=I+1;
  until not Process32Next(FSnap, PE);
Result:=I;
end;


Для работы этого кода нужно подключить в разделе USES модуль TlHelp32 (Help Tool API 32). 

Функция возвращает число процессов и записывает их пути в массив-переменную Proc. Тип переменной Proc - обычный массив строк, который нужно описать в разделе описания типов: 

type TProcArray = Array of String;

Поясню основные моменты реализации кода. Строка 
 
FSnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

означает получение "моментального снимка всех процессов". Точнее, в результате ее выполнения мы получаем дескриптор снимка. Функции Process32First и Process32Next позволяют "пробежаться" по всем процессам. О более детальной информации отсылаю читателя к справочной литературе об API.

Комментариев нет: