Cześć, szlag mnie już trafia, bo siedzę nad pierdołą już godzinę.
Chcę zdobyć uchwyt do okna jakiejś aplikacji, znając ścieżkę do pliku exe. Robię tak:
function TProcessManager.GetWindowHandle(ExeFileName: string): HWND;
var
res: hwnd;
function EnumWindowsProc(handle: HWND; param: integer): boolean; stdcall;
var
fName: PAnsiChar;
s: string;
begin
fName:=StrAlloc(MAX_PATH+1);
GetWindowModuleFileName(handle, fName, MAX_PATH);
s:=(String(fName));
if lowerCase(s) = lowerCase(exeFileName) then
begin
res:=handle;
result:=false;
end else result:=true;
end;
begin
EnumWindows(@EnumWindowsProc, 0);
result:=res;
end;
Ktoś mi może powiedzieć, co jest w tym kodzie nie tak?
Przy lowerCase dostaję AccessViolation, nawet do środka LowerCase nie wchodzi!
O dziwo, jeśli zrobię zamiast lowerCase:
showDialog(string(fName));
to wszystko jest ładnie pokazywane :|
Przeszukiwałem inne kody i tam na bezczela było rzutowanie na PChar w funkcji GetWindowModuleFileName, ale u mnie też wysypuje przy lowerCase. O co w tym chodzi?