Ustawianie kursora na konkretnym punkcie...

0

Jak można ustawić kursor na konkretnym pikselu? Nie chodzi mi o przesunięcie mouse_event(mouseeventf_move,x,x,0,0) chyba że da się to przerobić jakoś... proszę o pomoc.

0

Jeśli chcesz przesunąć sam kursor to:

SetCursorPos(
  X,
  Y
);

Jeśli chcesz wywołać zdarzenie ruchu urządzeniem wejściowym to:

mouse_event(
  MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE,
  MulDiv(X, 65535, Screen.Width),
  MulDiv(Y, 65535, Screen.Height),
  0,
  0
);
0

Wielkie dzięki :) A w praktyce to jest jakaś różnica którą procedurę wykonam?

0

Bardzo duża - pierwsza metoda przestawia tylko graficzny obiekt kursora na inny punkt. Nie wysyła komunikatów o zdarzeniu, nie jest ono przechwytywane przez hook'i urządzenia wejściowego. Druga dokładnie symuluje wykonanie operacji myszą przez użytkownika.

0

Czyli jeżeli użyje pierwszej metody i przestawię gdzieś kursor a potem spróbuję programowo kliknąć

mouse_event(2,0,0,0,0);
mouse_event(4,0,0,0,0);

To tak naprawdę kliknie w punkcie w którym kursor znajduje się "naprawdę" ???

A i mam jeszcze drugie pytanie... jeżeli mam obrazek w timage i znam tylko współrzędne jakiegoś punktu względem obrazka (czyli np lewy górny róg obrazka to zawsze 0,0) to jak mam zrobić żeby przesunąć kursor na ten właśnie punkt? Czyli niezależnie od tego gdzie znajduje się na ekranie forma z timage???

0

Kliknięcie przy obu metodach wystąpi w nowym punkcie. Różnica jest w wykonaniu sposobie przesunięcia kursora, ale efekt końcowy jest ten sam.

Przesunięcie nad piksel (10,10) w obrazku:

var Cel:TPoint;
begin
//X,Y piksela docelowego względem obrazka
Cel:=Point(10, 10);

//X,Y piksela docelowego względem ekranu
Cel:=Image1.ClientToScreen(Cel);

//Przesunięcie kursora
SetCursorPos(Cel.X, Cel.Y);

//Kliknięcie w punkt (10, 10) obrazka
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
0

Dzięki! Jesteś wielki [browar]

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