В Windows 95/98/2000/xp/nt код может выглядеть следующим образом:
function GetProcessesWin95(var Proc: TProcArray):Integer;
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.
Комментариев нет:
Отправить комментарий