Klikanie myszką w wybranym oknie

0

Witam. Orientuje się ktoś czy w delphi możliwe jest wysyłanie kliknięć myszy do wybranej aplikacji jeżeli ona jest zminimalizowana? Próbuję to zrobić i jedyne co działa to niestety poniższy skrypt, który owszem klika myszką, ale wszędzie - nie tylko w wybranym oknie.

var
  h: HWND;
begin
Randomize;
timer1.interval := Spinedit1.value + RandomRange(1, SpinEdit2.Value);
h := FindWindow(nil, 'ApkaDKZ');
SendMessage(h, WM_KEYdown, 116, 0);

  SetCursorPos(SpinEdit3.value, Screen.Height-SpinEdit4.value); //set cursor to Start menu coordinates
  mouse_event(MOUSEEVENTF_LEFTDOWN,0, 0, 0, 0); //press left button
  mouse_event(MOUSEEVENTF_LEFTUP,0, 0, 0, 0); //release left button
hotkey(edit1.text);
Memo1.Lines.Add(FormatDateTime('HH:MM:SS:Z', Time));
end;


Poniższy kod niby kieruje kliknięcia do innego okna, jednak pomimo niezmiennej zadeklarowanej pozycji myszki miejsce jej kliknięcia jest ciągle inne.

var

  h: HWND;
  x,y: integer;

begin
h := FindWindow(nil, 'ApkaDKZ');
x := spinedit3.Value;
y := spinedit4.Value;
begin

  SendMessage(H,WM_LBUTTONDOWN, 0, MakeLParam(SpinEdit3.Value, SpinEdit4.Value));
  SendMessage(H,WM_LBUTTONUP,   0, MakeLParam(SpinEdit3.Value, SpinEdit4.Value));

end;
end;
0

Kod, który podałeś, po prostu ustawia kursor na ekranie oraz symuluje wciśnięcie i puszczenie przycisku myszy. Aplikacja zminimalizowana nie ma widocznego na ekranie żadnego okna, więc tego kodu nie da się w tym przypadku zastosować.

Aby wysłać komunikat do zminimalizowanej aplikacji, musisz najpierw pobrać uchwyt jej okna i wysłać odpowiednie komunikaty do niego, za pomocą SendMessage lub PostMessage. Dane dotyczące komunikatu, czyli jego numer, współrzędne kliknięcia, stan klawiszy itd. należy upchnąć w parametrach wParam i lParam. Po więcej informacji odsyłam do dokumentacji – poczytaj o tych funkcjach, o komunikatach i o danych, jakie powinny dostarczać.

Tyle że jeśli aplikacja jest zminimalizowana to może odrzucać takie komunikaty.

2

W zminimalizowane ani ukryte okna się nie klika i nie tylko w Delphi ale w żadnym języku. Bramkarz też nie złapie piłki lecącej prosto na niego, którą powinien złapać, bo przecież jeszcze przed chwilą stał dokładnie w tym miejscu tylko zmylony rzucił się w róg bramki.

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