标签:
方法一: 要加单元 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;
标签:
原文地址:http://www.cnblogs.com/rogge7/p/4422148.html