Вам не нужен J (WS) CL, поэтому существует простой вызов WinAPI, который делает почти все, что вы хотите, и это CreateToolhelp32Snapshot
. Чтобы получить снимок всех запущенных процессов, вы должны вызвать его следующим образом:
var
snapshot: THandle;
begin
snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Теперь у вас есть список всех запущенных процессов. Вы можете перемещаться по этому списку с помощью функций Process32First
и Process32Next
, записи списка являются PROCESSENTRY32
-структурами (которые среди прочего содержат идентификатор процесса и имя изображения).
uses
Windows, TLHelp32, SysUtils;
var
snapshot: THandle;
ProcEntry: TProcessEntry32;
s: String;
begin
snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (snapshot <> INVALID_HANDLE_VALUE) then begin
ProcEntry.dwSize := SizeOf(ProcessEntry32);
if (Process32First(snapshot, ProcEntry)) then begin
s := ProcEntry.szExeFile;
// s contains image name of the first process
while Process32Next(snapshot, ProcEntry) do begin
s := ProcEntry.szExeFile;
// s contains image name of the current process
end;
end;
end;
CloseHandle(snapshot);
Однако информация об использовании памяти, по-видимому, не включена, но вы можете получить ее с помощью другого простого вызова API, GetProcessMemoryInfo
uses
psAPI;
var
pmc: TProcessMemoryCounters;
begin
pmc.cb := SizeOf(pmc) ;
if GetProcessMemoryInfo(processID, @pmc, SizeOf(pmc)) then
// Usage in Bytes: pmc.WorkingSetSize
else
// fail
Вам просто нужно вызвать эту функцию с идентификаторами процессов, полученными из моментального снимка.