Moin,
ich habe schon viel dazu gelesen, allerdings funktioniert das nicht, was ich glesen habe. Ich liste mal auf, was ich schon habe:
Von Luckie: ProcessID herausbekommen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function GetProcessID(Exename: string): DWORD; var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do begin if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; end; end; CloseHandle(hProcSnap); end; end; |
Dann:
Von Luckie: Handle von der ProzessID
1: 2: 3: 4: 5:
| function GetProcessHandleFromID(ID: DWORD): THandle; begin result := OpenProcess(SYNCHRONIZE, False, ID); CloseHandle(result); end; |
Und zu guter letzt, leicht modifiziert von
hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function GetProcessMemorySize(Process:Cardinal; out MemSize: Cardinal): Boolean; var l_nProcID, l_nTmpHandle: HWND; l_pPMC: PPROCESS_MEMORY_COUNTERS; l_pPMCSize: Cardinal; begin if Process = 0 then begin Result := False; Exit; end;
l_pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
GetMem(l_pPMC, l_pPMCSize); l_pPMC^.cb := l_pPMCSize;
GetWindowThreadProcessId(Process, @l_nProcID); l_nTmpHandle := OpenProcess(PROCESS_ALL_ACCESS, False, l_nProcID);
if (GetProcessMemoryInfo(l_nTmpHandle, l_pPMC, l_pPMCSize)) then MemSize := l_pPMC^.WorkingSetSize else MemSize := 0;
FreeMem(l_pPMC);
Result := True; end; |
Den Aufruf hatte ich mir ungefähr so vorgestellt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function GetProzessSpeicherbedarf(FileName:String; out MemorySize:Cardinal):Boolean; var hProcess:Cardinal; begin result:=false; hProcess := GetProcessHandleFromID(GetProcessID(FileName)); if hProcess = 0 then exit; result:= GetProcessMemorySize(hProcess,MemorySize); end; |
So. Er findet auch ein Handle, allerdings wird der Speicherbedarf nicht ausgelesen

. Was mache ich falsch oder gibt es eine andere Möglichkeit, aus einer Anwendung (Exe oder Pfad) den Speicherbedarf herauszubekommen?
MfG
Regan