@user322 - czy nie możesz użyć zmiennej Looper
w pętli bez rzutowania?
while Looper do
begin
// code here
end;
Nie musisz tego rzutować, bo nawet jeśli liczbowa wartość tej zmiennej jest większa od 1
, to pętla i tak będzie działać prawidłowo; Poza tym niepotrzebnie zrobiłeś sobie funkcję zagnieżdżoną, skoro ona w tym przypadku nic nie daje - używasz jej raz, a główny blok funkcji nadrzędnej zawiera tylko wywołanie funkcji i zwrócenie wyniku; Zmniejszyłeś sobie czytelność kodu, praktycznie nic nie zyskując;
Poza tym pętlę While możesz zamienić na Repeat i w ogóle pozbyć się dodatkowej zmiennej (PName
przy okazji też):
function GetWindowProcessName(AWnd: HWND): String;
var
proc: TPROCESSENTRY32;
hSnap: HWND;
PID: Cardinal;
begin
GetWindowThreadProcessID(AWnd, PID);
proc.dwSize := SizeOf(proc);
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
try
if Process32First(hSnap, proc) then
repeat
if PID = Int64(proc.th32ProcessID) then
Result := proc.szExeFile;
until not Process32Next(hSnap, proc);
finally
CloseHandle(hSnap);
end;
Result := ExtractFileName(Result);
end;
To samo, a znacznie czytelniejsze i krótsze - przetestuj sobie.