Получаем размер памяти, отведенной под данный процесс

Привет всем, сегодня мы узнаем, сколько памяти выделяется под какую-либо программу. Список работающих программ находится во вкладке Приложения в диспетчере задач Windows.
Для реализации нашей задачи пригодится следующая функция:


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; 


Для того, чтобы данная функция работала без ошибок в раздел uses надо прописать пункт psApi.
Использовать функцию надо примерно так:

procedure TForm1.Button1Click(Sender: TObject); 
var 
  l_nSize: Cardinal; 
begin
  if (GetProcessMemorySize('Project1', l_nSize)) then
    ShowMessage('Size: ' + IntToStr(l_nSize) + ' byte')
  else 
    ShowMessage('Error');
end;


Вместо Project1 пишем любое запущенное в данный момент приложение.

Надеюсь, что у вас всё заработало:)
Удачи!


Комментарии

Популярные сообщения из этого блога

Delphi: Создаем простейшую 2D игру