Zautomatyzuj swoje życie, czyli prosty blog o AutoHotKey — epizod 6
12.07.2018 | aktual.: 22.07.2018 12:47
Dzisiaj poopisujemy sobie Hotkeye z użyciem własnych modyfikatorów.
Poprzedni Epizod znajdziecie - tutaj. A zaczynamy dziś od krótkiego powtórzenia.
Hotkey raz jeszcze
Hotkey zapisujemy stosując dwa dwukropki - kod hotkeya po lewej stronie wywołuje akcję po prawej stronie - może mieć dowolną długość - zawrzeć się w jednej linijce lub opisać rozbudowaną funkcję na 300 wierszy nie licząc podprocedur ;)
r::w
taki hotkey spowoduje że wasza klawiatura przy każdym naciśnięciu "r" będzie wysyłała do komputera znak "w". Ten oneliner pozwala na łatwe przemapowanie klawiszy - np. coś z czego sam korzystam w AutoCAD czyli zamiana przecinka z klawiatury numerycznej na kropkę:
NumPadDot::.
Oczywiście znajduje się to wewnątrz dyrektywy #IfWinActive ahk_exe acad.exe.
Dzięki onelinerom można zablokować klawisz w tym sensie że Windows nie odbierze żadnego znaku (zostanie przechwycony i zniwelowany przez działający skrypt):
x:: x::Return
zadziałają obie wersje, z tym że gdzieś przeczytałem że ta z "returnem" jest bardziej elegancka.
To co ma się dziać po wciśnięciu waszego hotkeya zależy tylko od was. Już w 2 epizodzie napisaliśmy skrypt który zawierał 5 linijek a który pozwalał na kopiowanie bocznym klawiszem myszki:
XButton1:: ;; kopiuj ClipBoard = Send, ^c ClipWait, 0.5 Return,
zakończenie Returnem jest istotne w takim wypadku.
Hotkeye budowane z modyfikatorami
Hotkey można zbudować (częściej trzeba, ze względu na to by nie zamieniać normalnie działających i potrzebnych przycisków) z jakimś dodatkowym klawiszem. W użyciu mamy zatem:
- hasz lub płotek - "#" - jest modyfikatorm rozumianym jako wciśnięcie klawisza "Windowsa"
- daszek - "^" - jest rozumiany jako wciśnięcie "Control"
- plus - "+" - jest rozumiany jako wciśnięcie "Shift"
- wykrzyknik - "!" - jest rozumiany jako wciśnięcie "Alt"
- nawiasy trójkątne = "<" ">" - pozwalają wskazać który ze zdublowanych klawiszy ma być brany pod uwagę - lewy czy prawy (dotyczy Control, Shift, Alt)
Dzięki tym modyfikatorom, które, można ze sobą łączyć otrzymujemy kombinacje hotkeyów takie jak:
^c - czyli Control+C #m - czyli Windows+M !+r - czyli Alt+Shift+R
Zwiększa nam to ilość potencjalnych hotkeyów i zabezpiecza przed wykonywaniem skryptów przy normalnym wprowadzaniu tekstu.
Prefiksy
Gwiazdka - "*" - pozwala na uruchomienie skryptu danym hotkeyem bez względu na użyty modyfikator, jednak uruchomi wszystkie inne zawierające ten hotkey. Ok wyjaśnijmy to sobie, zakładając że mamy:
^m:: hotkey nr1 +m:: hotkey nr2 !^m:: hotkey nr2
Każdy hotkey będzie odpalał swoje osobne akcje. Jednakże dopisanie nowego hotkeya ze swoim zestawem poleceń, do tych trzech, w postaci:
*m:: hotkey nr4
zadziała tak, że wciśnięcie dowolnego z hotkeyów od 1 do 3 spowoduje uruchomienie dodatkowo hotkeya 4.
Tylda - "~" - daje do zrozumienia interpreterowi AHK że nie chcemy blokować czy zastępować domyślnego działania klawisza (czy hotkeya), a jedynie dodać jakąś naszą własną fukcję. Możemy np. chcieć otworzyć dialog zapisu pliku w jakimkolwiek programie i podstawić automatycznie w tym dialogu nazwę którą wcześniej skopiowaliśmy do schowka - taki kod powinien zadziałać:
~^s:: Sleep, 1000 Send, ^v Return,
Dolar - "$" - ma znaczenie w takich skryptach które zawierają polecenie Send. załóżmy taką sytuację - dwa jakieś hotkeye które działają zgodnie z naszym założeniem:
h::Send, ribbon g::Send, house
Wykonanie hotkeya pod klawiszem "g" wysyła nam do aplikacji tekst "house" - w tej sytuacji gdy nie użyliśmy dolara w momencie "publikacji" litery "h" z napisu "house" automatycznie zostanie wykonany ciąg poleceń hotkeya spod klawisza "h".
Aby tego uniknąć przed hotkeyem "h" dopisujemy dolara i inne hotkeye wysyłające literę "h" nie wywołają tego hotkeya..
Jeśli nie mamy żadnego jedno-znakowego hotkeya nie musimy się obawiać niczego.
Jeszcze więcej modyfikatorów
Możemy użyć dowolnej pary klawiszy do hotkeya z czego pierwszy traktowany jest jako modyfikator i nie podlega działaniu prefiksów. Łączenie dwóch klawiszy dokonujemy znakiem "&" ampersanda. Np. tak:
d & f:: akcja!
Działa to tak samo jak używanie shift czy control. Wciskamy pierwszy klawisz trzymając go wciskamy drugi - wtedy skrypt wykonuje swoje działanie a my możemy puścić klawisze. Jednakże pierwszy klawisz będzie zablokowany i samodzielnie nie wyśle swojego znaku. Doszedłem do tego że stosowanie prefiksów nic tu nie daje a wyjście to "uwolnienie" pierwszego klawisza - przypisanie go do siebie samego. Sam posiadam podobny działający zestaw:
d & r:: polecenie 1 d & t:: polecenie 2 d & f:: polecenie 3 d & g:: polecenie 4 d & c:: polecenie 5 d & v:: polecenie 6 d::d ;;"uwolnienie" pierwszego klawisza
Nie ma absolutnie przeszkód aby takie sekwencje zrobić z przyciskami na myszcze, i to w obie strony:
XButton1 & q:: Send, pierwszy hotkey q & RButton:: Send, drugi hotkey
Oczywiście należy (jak powyżej) "uwolnić" klawisz, albo przypisać mu własne inne polecenie domyślne.
Wysyłając więcej niż jeden znak (czyli tak właściwie to nie jest remapowanie klawiszy a podawanie do aplikacji całego tekstu) musimy się posłużyć komendą Send:
^h::Send,Bri tu był g & h::Send, Bri tu był ::gh::Bri tu był
Oczywiście zawsze tez możemy użyć hotstringa ;)
Triki
Jeśli chcesz zamienić klawisz CapsLock w zwykły shift - napisz tak:
CapsLock::Shift
Chcesz szybko sterować skryptem bez potrzeby klikania w menu w zasobniku - napisz np. tak:
~CapsLock::Reload ~ScrollLock::Suspend +Esc::ExitApp
Są to wewnętrzne polecenia AHK:
Reload - przeładowuje skrypt (i w tym wypadku włącza capslocka, więc trzeba pacnąć go raz jeszcze żeby nie przeszkadzał), bardzo użyteczne gdy coś zmodyfikowaliście w skrypcie i potrzeba sprawdzić to w akcji,
Suspend - zawiesza działanie skryptu a ikonka w zasobniku zmienia się z "H" na "S",
ExitApp - to zamknięcie skryptu. I kropka.
Następny - Odcinek 7