Mein Problem ist folgendes: Ich habe eine Liste aller Prozesse (aaa.exe, bbb.exe, etc.). Nun will ich die jeweilige Auslastung mit GetProcessMemoryInfo() der PSAPI ermitteln. Das mach ich wie folgt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
VAR List1 : TStringList;
i : integer;
Item : TListItem;
Test : PPROCESS_MEMORY_COUNTERS;
temp : THandle;
begin
List1 := TStringlist.Create;
for i := 0 to List1.Count-1 do
begin
Item := ListView1.Items.Add;
Item.Caption := List1.Strings[i];
IF GetProcessMemoryInfo(GetWH(List1.Items[i]), Test, SizeOf(Test)) THEN //<- IMMER FALSE!
Item.SubItems.Add(IntToStr(Test^.PeakWorkingSetSize));
end;
Die Funktion GetWH ( -> getwindowhandle) sieht so aus:
Delphi-Quellcode:
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;
Leider wird mir nichts zurück-geliefert, da die IF-Anweisung immer false ergibt.