Problem z PChar i EnumWindows

0

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?

0

Jakiej wersji Delphi uzywasz ? W 2009++ musisz zamiast stringa dac AnsiString.
Ponadto by raczej bylo, ewentualnie s:=StrPas(fName);

0
Piotr Zegar napisał(a)

Jakiej wersji Delphi uzywasz ? W 2009++ musisz zamiast stringa dac AnsiString.
Ponadto by raczej bylo, ewentualnie s:=StrPas(fName);

Mam 2005.
Wywaliłem funkcję EnumWindowProc całkowicie poza klasę. Nie jest już funkcją zagnieżdżoną.
Dodałem dyrektywę export.
Skutek jest taki, że pierwsze wywołanie idzie, ale drugie się wywala.
Wywala się na rzutowaniu na String lub na użyciu funkcji StrPas.
Próbowałem też zamiast stringa dać AnsiString i też dupa [glowa]

[DOPISANE]
OK, dodałem strDispose na końcu funkcji i wygląda na to, że zaczęło działać. Jeszcze to potestuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1