Einzelnen Beitrag anzeigen

Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Speicherauslastung eines beliebigen Prozesses anzeigen

  Alt 28. Mär 2004, 15:47
Also sieht der Quellcode jetzt so aus:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  pmc: PPROCESS_MEMORY_COUNTERS;
  cb: Integer;
  PrID: Integer; // processidentifier
begin
  PrID := StrToInt('$' + Listbox2.Items.Strings[Listbox1.Itemindex]);

  cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc, cb);
  pmc^.cb := cb;
  if GetProcessMemoryInfo(OpenProcess(PROCESS_QUERY_INFORMATION, false, PrID), pmc, cb) then
    Label1.Caption := IntToStr(pmc^.WorkingSetSize) + ' Bytes'
  else
    Label1.Caption := 'Unable to retrieve memory usage structure';
    ShowMessage(SysErrorMessage(GetLastError));

  FreeMem(pmc);
end;
dann funktioniert es Teilweise, mit 3 verschiedenen Fehlermeldungen, bei verschiedenen Prozessen:
1. Das Fenster hat keine Bildlaufleisten /mal eine interessante Meldung
2. Das Handle ist ungültig
3. irgendetwas mit nugülter Klasse / nur selten, fast willkürlich

Zu bemerken ist, dass nur bei der zweiten Meldung nix gescheites angezeigt wird, mit den anderen geht es.

Bei dem Quellcode von Christian funktioniert es nahezu bei jedem Prozess. Ich hab dann noch ein
Delphi-Quellcode:
    hProc := OpenProcess(PROCESS_QUERY_INFORMATION, false, PrID);
    if hProc <> 0 then begin
    ...
    else ShowMessage(SysErrorMessage(GetLastError));
eingebaut und festgestellt, dass dies (bei z.B. svchost.exe die zwei von vier Prozessen die vom SYSTEM ausgeführt werden) ein "Zugriff verweigert" ergibt. Dies war wohl beim obrigen Quellcode der selbe Fehler, halt durch eine andere Fehlermeldung ausgedrückt.
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat