ok, wer lesen kann ist klar im Vorteil. Gesucht ist das process-
handle (danke das du mich drauf aufmerksam gemacht hast
)! Das bekomme ich jetzt zwar raus, weiter bringts mich trotzdem nicht...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
VAR List1 : TStringList;
i : integer;
Item : TListItem;
Test : PPROCESS_MEMORY_COUNTERS;
ID : DWord;
Temp : THandle;
begin
List1 := TStringList.Create;
GetProcessList(List1);
for i := 0 to List1.Count-1 do
begin
Item := ListView1.Items.Add;
Item.Caption := List1.Strings[i];
GetWindowThreadProcessId(GetWH(List1.Strings[i]), ID); //GetWH bekommt das WindowHandl
Temp := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ID);
IF GetProcessMemoryInfo(Temp, Test, SizeOf(Test)) THEN
Item.SubItems.Add(IntToStr(Test.PeakWorkingSetSize));
end;
end;
function GetWH(AExeName: string): THandle;
var
SnapShot: THandle;
p: TProcessEntry32;
ProcessHandle: THandle;
begin
Result := 0;
WindowHandle := 0;
ProcessHandle := 0;
p.dwSize := SizeOf(p);
SnapShot := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
try
if Process32First(SnapShot, p) then
repeat
if AnsiLowerCase(AExeName) = AnsiLowerCase(p.szExeFile) then
ProcessHandle := p.th32ProcessID;
until (ProcessHandle <> 0) or not Process32Next(SnapShot, p);
EnumWindows(@MyEnumWindowProc, ProcessHandle);
Result := WindowHandle;
finally
CloseHandle(SnapShot);
end;
end;
function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): boolean;
stdcall;
var
ProcessID: THandle;
begin
ProcessID := 0;
GetWindowThreadProcessID(AHandle, ProcessID);
Result := not (ProcessID = LParam);
if not Result then
WindowHandle := AHandle;
end;
Klappen tut es trotzdem nicht