Ich möchte in einem Programm eine Liste aller Prozesse ausgeben inklusive:
- PID
- Benutzername des Prozesses
- Prozessorbelastung jedes Prozesses
-
RAM je Prozess
- virtueller Speicher je Prozess
- Priorität
Also Im Prinzip genauso, wie es auch im Windows Taskmanager getan wird.
Doch wie realisiere ich dies?
Hier immerhin schonmal ein Anfang, wobei ich mir nicht sicher bin, ob der Prozess mit PID 4 immer
der Systemprozess ist. Der Leerlaufprozess wird momentan auch nicht angezeigt, da dessen
Handle scheinbar Null ist.
Delphi-Quellcode:
procedure GetProcessList (var stringliste : tstringlist);
var PrIDs : Array [0..100] of DWORD;
bia : DWORD;
PrCount : Integer;
ProzessHandle : HWND;
Modulhandle : HWND;
i : Integer;
PrName : Array [0..255] of Char;
begin
stringliste:=TStringList.Create;
if EnumProcesses(@PrIDs, SizeOf(PrIDs), bia) then
if bia < sizeof(PrIDs) then
begin
PrCount:=Bia div SizeOf(DWORD);
for i:=0 to PrCount do
begin
ProzessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ, false, PrIDS[i]);
if ProzessHandle <> 0 then
begin
EnumProcessModules(ProzessHandle, @ModulHandle, SizeOf(modulhandle), bia);
GetModuleFilenameEx(Prozesshandle, ModulHandle, PrName, SizeOf(PrName));
if PrIDS[i] = 0 then PrName := 'Leerlaufprozess';
if PrIDS[i] = 4 then PrName := 'System';
stringliste.add(inttostr(PrIDS[i]) + ' ' +PrName) ;
CloseHandle(ProzessHandle);
end;
end;
end//if bia < sizeof...
else RaiseLastOSError(); //if enumprocesses...
end;