Cześć,
mam problem z pobraniem pozycji przycisków tytułowych okien. Problem dotyczy tylko nich, ponieważ ta sama funkcja, która zawraca mi pozycje kontrolki znajdującej się pod kursorem działa prawidłowo dla wszystkich kontrolek wewnątrz okien Windows.
Tak wygląda wypełniony obiekt, zawierający dane odczytane spod kursora za pomocą
Funkcja pobierająca współrzędne kontrolki na podstawie uchwytu:
function GetControlXY(Wnd: HWND): TPoint;
var
p: TPoint;
Rect: TRect;
begin
// Pobierz pozycję kontrolki/okna na podst. uchwytu
GetWindowRect(Wnd, Rect);
p.X := Rect.Left;
p.Y := Rect.Top;
Result := p;
end;
wypełniony obiekt z danymi spod kursora wygląda następująco:
object TDaneKursora
NazwaProcesu="explorer"
NazwaOkna="spyxx14"
KlasaOkna="CabinetWClass"
OpisKontrolki="spyxx14"
KlasaKontrolki="CabinetWClass"
object _PozycjaKontrolki
pozX=610
pozY=344
end
object _PozycjaOkna
pozX=610
pozY=344
end
object _PozycjaNaKontrolce
pozX=915
pozY=16
end
object _PozycjaNaOknie
pozX=915
pozY=16
end
object _PozycjaKursora
pozX=1525
pozY=360
end
end
a tak wyliczam pozycje na kontrolce i pozycje na oknie:
// pomUchwytOknaKontrolki to HWND
// p_Pozycja to współrzędne kursora na ekranie
pomUchwytOknaKontrolki := WindowFromPoint (p_Pozycja);
OpisKontrolki := GetCaptionFromHandle (pomUchwytOknaKontrolki);
KlasaOkna := GetMainWindowClassName (pomUchwytOknaKontrolki);
PozycjaKursora := p_Pozycja;
PozycjaOkna := GetWindowPos(KlasaOkna, OpisKontrolki);
PozycjaKontrolki := GetControlXY (pomUchwytOknaKontrolki);
PozycjaNaKontrolce := PozycjaKursora - PozycjaKontrolki; // pozycja kursora względem kontrolki np. buttona
PozycjaNaOknie := PozycjaKursora - PozycjaOkna; // pozycja kursora względem okna
jak widać klasa okna to CabinetWClass tak samo jak klasa kontrolki.
W załączniku zrzut okno otwartego folderu wygląda w Spy++ oraz samego okna.
Kursor ustawiam na podstawie współrzędnych:
var
pomKursorPos: TPoint;
begin
pomKursorPos := PozycjaKontrolki + PozycjaNaKontrolce
Moja aplikacja nagrywa ruchy kursora, które później ma naśladować razem z kliknięciami, niestety w przypadku kliknięcia na przyciski na pasku tytułowym, kursor ustawia się jakieś 4 cm pod nim.