方法一: 要加单元 PsAPI
procedure TForm1.tmr1Timer(Sender: TObject);
begin
edt1.Text:= format('memory use: %d KB', [GetProcessMemUse(GetCurrentProcessId)]);//方法一
end;
function TForm1.GetProcessMemUse(PID: Cardinal): Cardinal; //方法一
var
pmc: PPROCESS_MEMORY_COUNTERS; //uses psApi
ProcHandle: HWND;
iSize: DWORD;
begin
Result := 0;
iSize := SizeOf(_PROCESS_MEMORY_COUNTERS);
GetMem(pmc, iSize);
try
pmc^.cb := iSize;
ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, PID); //由PID取得进程对象的句柄
if GetProcessMemoryInfo(ProcHandle, pmc, iSize) then
Result := pmc^.WorkingSetSize;
Result :=Result div 1024;
finally
FreeMem(pmc);
end;
end;
//*********************************************
方法二:要加单元 PsAPI, Tlhelp32;
procedure TForm1.tmr1Timer(Sender: TObject);
var
str,str2:string;
begin
if (GetProcessMemorySize('proj1.exe',str,str2)) then //方法二 参数要写程序名,不好
begin
edt2.Text :='当前内存使用:'+ str +'KB';
end;
end;
function TForm1.GetProcessMemorySize(ProcessName: string; var Size, //方法二
PN: string): Boolean;
var
pProcess:THandle;
MemSize,t:Integer;
hProcSnap:THandle;
PPMCSize:Cardinal;
pe32:TProcessEntry32;
PPMC:PPROCESS_MEMORY_COUNTERS;
begin
PPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
GetMem(PPMC, PPMCSize);
PPMC^.cb:= PPMCSize;
hProcSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
if hProcSnap=INVALID_HANDLE_VALUE then Exit;
pe32.dwSize:=SizeOf(ProcessEntry32);
if Process32First(hProcSnap,pe32)=True then
while Process32Next(hProcSnap,pe32)=True do
begin
if uppercase(pe32.szExeFile)=uppercase(ProcessName) then
begin
pProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE, pe32.th32ProcessID);
if (GetProcessMemoryInfo(pProcess,PPMC,PPMCSize)) then
begin
MemSize:=PPMC^.WorkingSetSize div 1024;
t:= Length(IntToStr(MemSize))-2;
Size:=IntToStr(MemSize);
Insert(',',Size,t);
PN:=ProcessName;
FreeMem(PPMC);
Result:=True;
end
else
begin
FreeMem(PPMC);
Result:=False;
end;
end;
end;
CloseHandle(pProcess);
CloseHandle(hProcSnap);
end;