Einzelnen Beitrag anzeigen

andreasm1982

Registriert seit: 21. Aug 2007
1 Beiträge
 
Delphi 7 Personal
 
#1

Liste aller Prozesse inkl. PID, User, CPU-Load, Speicher

  Alt 21. Aug 2007, 11:57
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;
  Mit Zitat antworten Zitat