this slowpoke moves

Get Process real size

Der Taskmanager zeigt uns laufende Prozesse und deren Speichergröße an, doch die stimmen nicht immer wirklich. Denn die meisten Prozesse benötigen viel mehr Speicher, als uns übermittelt wird.

Das folgende Beispiel ermittelt uns die tatsächliche Größe eines Prozesses im Arbeitsspeicher.

Der Wiedergabewert wird in Byte übermittelt.
uses psAPI

//

function GetProcessMemorySize(_sProcessName: string; var _nMemSize: Cardinal): Boolean;
var
  l_nWndHandle, l_nProcID, l_nTmpHandle: HWND;
  l_pPMC: PPROCESS_MEMORY_COUNTERS;
  l_pPMCSize: Cardinal;
begin
  l_nWndHandle := FindWindow(nil, PChar(_sProcessName));

  if l_nWndHandle = 0 then
  begin
    Result := False;
    Exit;
  end;

  l_pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
  GetMem(l_pPMC, l_pPMCSize);
  l_pPMC^.cb := l_pPMCSize;
  GetWindowThreadProcessId(l_nWndHandle, @l_nProcID);
  l_nTmpHandle := OpenProcess(PROCESS_ALL_ACCESS, False, l_nProcID);

  if (GetProcessMemoryInfo(l_nTmpHandle, l_pPMC, l_pPMCSize)) then
    _nMemSize := l_pPMC^.WorkingSetSize
  else
    _nMemSize := 0;
  FreeMem(l_pPMC);
  Result := True;
end;

Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
var
  l_nSize: Cardinal;
begin
  if (GetProcessMemorySize('Project1', // HIER DEN NAMEN DES PROZESSES ANGEBEN
  							l_nSize)) then
    ShowMessage('Size: ' + IntToStr(l_nSize) + ' byte')
  else
    ShowMessage('Error');
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate