Zautomatyzuj swoje życie, czyli prosty blog o AutoHotKey — epizod 4

Po dłuższej przerwie wracamy do skryptowania. Jak zaspoilerowałem w jednym z komentarzy rzucimy dziś okiem na sterowanie myszką z poziomu skryptu.

Do czego się to może przydać? Może na przykład żeby kliknąć ikonkę w aplikacji której autor nie przewidział żadnego skrótu klawiszowego? Do rysowania w MS Paint? Czemu nie. Żeby zrobić sobie autoclicker? Jak najbardziej.

Zajrzyj do poprzedniego: Epizod 3

Polecenia

Najłatwiejszym w użyciu (i polecanym) jest to:

Click, <współrzędne> i/lub <który przycisk> i/lub <ilość naciśnięć>

Gołe polecenie bez jakiegokolwiek dopisanego parametru (opcji) jest kliknięciem lewym przyciskiem myszy (domyślnym) w bieżącym położeniu kursora myszki.

Zakładam jednak że będziemy chcieli kliknąć nie tam gdzie jest kursor tylko tam gdzie jest coś do kliknięcia:

Click, 87, 218

Podałem współrzędne gdzie znajduje się interesująca mnie rzecz do kliknięcia. Współrzędne te są liczone od lewego górnego narożnika okna. A można je odczytać za pomocą tej fajnej aplikacji WindowsSpy o której mówiłem poprzednio:

Co ciekawe podane współrzędnych powoduje błyskawiczne przesunięcie myszki do tej określonej pozycji i tam wykonanie kliknięcia. Odpada zatem zupełnie stosowanie innego osobnego polecenia istniejącego w AHK - MouseMove.

Aby kliknąć innym przyciskiem wystarczy go wpisać w polecenie w dowolnym miejscu (nie zapominając przecinka) - może być przed współrzędnymi albo po nich, obie formy są poprawne.

Click, WheelUp, 650, 80

Click, 300, 50, X1

MouseClick

Ze względu na dowolność zapisu polecenia Click, nie przepadam za nim. W AHK równolegle występuje polecenie MouseClick, które różni się od Click ścisłym formatem zapisu oraz kilkoma kwestiami ściśle wewnętrznymi AHK, w których się nie doktoryzowałem. Można rzec że Click jest kliknięciem a MouseClick jest czymś w rodzaju wysłania kodu przycisku myszy. Mogą zdarzyć się sytuacje wyjątkowe gdzie aplikacja nie będzie przyjmowała któregoś polecenia - wtedy jest drugie. 

MouseClick, <który przycisk> , <współrzędna X> , <współrzędna Y> , <ilość kliknięć> , <prędkość przemieszczania> , <wciśnięcie / puszczenie> , <względny tryb ruchu>

Pominięcie którejś informacji i tak wymaga wpisania określonej liczby przecinków. Jeśli chcielibyśmy wykonać 5 kliknięć prawym przyciskiem zapiszemy to tak:

MouseClick, right, , , 5

Wspominam o tym dlatego iż wiele poleceń w AHK ma podobną (ścisłą) składnię gdzie przecinkami oddziela się określone parametry i można określać nawet tylko jeden dowolny parametr (nie zapominając oczywiście określonej ilości przecinków). Np. omawiana w poprzednim odcinku dyrektywa #IfWinActive.

Wracając do klikania - parametry:

  • <który przycisk> to: Left, Right, Middle, X1, X2, WheelUp, WheelDown, WheelLeft, WheelRight (nazwy te obowiązują także w poleceniu Click),
  • współrzędne oraz ilość kliknięć są chyba oczywiste,
  • <prędkość przemieszczania> - domyślna to 2, 0 to ruch natychmiastowy, a maksymalnie powolny to 100, jednak nie mam pewności czy ma to tu znaczenie (na pewno ma w poleceniu MouseMove),
  • jeżeli nie użyjemy tego parametru skrypt wie że chcemy kliknąć, jeśli wpiszemy "D" damy mu do zrozumienia że chcemy tylko wcisnąć klawisz, z kolei jeśli wpiszemy "U" oznaczać to będzie puszczenie klawisza (można to wykorzystać do przeciągania),
  • <względny tryb ruchu> - literka "R" wpisana w tym miejscu będzie informacją że nie podajemy współrzędnych od lewego górnego rogu tylko współrzędne względne określone względem aktualnego położenia kursora - zatem [100, 0] przesunie kursor w prawo o 100 pikseli, a [0, -10] w gorę o 10 pikseli.

Zadanie domowe - dacie sobie rady ?

#IfWinActive, ahk_exe mspaint.exe
XButton1::	
	MouseClick, , 100, 500, , , D
	MouseClick, , 200, 220, , , U
	MouseClick, , 200, 220, , , D
	MouseClick, , 300, 500, , , U
	MouseClick, , 145, 370, , , D
	MouseClick, , 255, 370, , , U
	MouseClick, , 350, 220, , , D
	MouseClick, , 350, 500, , , U
	MouseClick, , 500, 220, , , D
	MouseClick, , 500, 500, , , U
	MouseClick, , 350, 370, , , D
	MouseClick, , 500, 370, , , U
	MouseClick, , 550, 220, , , D
	MouseClick, , 550, 500, , , U
	MouseClick, , 550, 370, , , D
	MouseClick, , 700, 220, , , U
	MouseClick, , 550, 370, , , D
	MouseClick, , 700, 500, , , U
Return,

Następny epizod - znajdziesz tutaj