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