Cześć, chcę pobrać handla do okna, znając ścieżkę do pliku exe, która go uruchomiła.
Generalnie problem wygląda tak - w menu mam ileś aplikaji. Kliknięcie powoduje uruchomienie danej aplikacji. Gdy kliknę po raz drugi, aplikacja ma się aktywować.
Niestety nie działa mi wyszukiwanie okien i nie wiem czemu. Znajduje z milion razy okno mojej aplikacji i kilka systemowych, a nie znajduje innych aplikacji.
Kod do wyszukania handla wygląda tak:
function EnumWindowsProc(h: HWND; lp: lParam): boolean; stdcall;
var
fName: PAnsiChar;
s: ansistring;
begin
fName:=StrAlloc(MAX_PATH+1);
GetWindowModuleFileName(h, fName, MAX_PATH); //ma zwrócić ścieżkę
if (fName = '') or (fName = nil) then
s:=''
else
s:=StrPas(fName);
if lowerCase(s) = lowerCase(exeFileName) then
begin
pInteger(lp)^:=h; //zapisz handla w odpowiednim obszarze pamięci
result:=false;
end else result:=true;
strDispose(fName);
enumChildWindows(h, @EnumWindowsProc, lp); //myślałem, że to pomoże, ale nie
end;
function TProcessManager.GetWindowHandle(ExeFileName: string): HWND;
var
res: HWND;
begin
res:=0;
uProcesses.exeFileName:=exeFileName;
EnumWindows(@EnumWindowsProc, Integer(@res));
result:=res;
end;
Czemu to nie działa?