Zautomatyzuj swoje życie, czyli prosty blog o AutoHotKey — epizod 3
20.05.2018 | aktual.: 22.07.2018 12:52
W tym odcinku omówimy sobie wiązanie naszych skryptów z konkretnymi aplikacjami. Jak wcześniej pisałem, dotąd, każdy z naszych dwóch skryptów przykładowych działał w całym Windowsie. Często jest to działanie niepożądane, nie tylko ze względu na "kolizję" poleceń ale także dlatego że możemy chcieć by w każdej aplikacji ten sam skrót wywoływał inne działanie.
Zajrzyj do poprzedniego: Epizod 2
Dyrektywy na porządku dziennym
Pierwszą dyrektywą (to określenie bardzo istotnych poleceń zaczynających się od hasza czy też płotka) i myślę że najczęściej stosowaną będzie następująca:
#IfWinActive, "namiar poprzez okno"
Określa ona nam - jeżeli dane "okno" jest aktywne zastosuj poniższe Hotkeye i Hotstringi (i inne formuły). Jednak musimy podać w tej dyrektywie które "okno" nas interesuje - musimy zaadresować dyrektywę do pożądanej aplikacji.
A robi się to używając odpowiednich kluczy. W miejscu gdzie wpisałem "namiar poprzez okno" należy oczywiście podać cel naszego kodu i możemy zrobić to na co najmniej 3 sposoby (podaję te najprostsze):
- początek nazwy jaka występuje w pasku tytułu (TitleBar) okna danej aplikacji
- ahk_exe nazwa-pliku-wykonywalnego-aplikacji
- ahk_class nazwa-klasy-okna
Ad1. W pierwszym przypadku wydawałoby się że jest to banalne, że możemy wpisać "Notepad++" "Firefox" "Word" - i wyraźnie powiążemy sobie nasze skrypty z oknami tych aplikacji. Jednak są tu dwa małe haczyki:
Jak widać pierwszy haczyk jest taki że w wielu przypadkach (na szczęście nie w TotalCommanderze) nazwa programu jest na końcu całego tytułu okna, a najpierw znajduje się nazwa otwartego pliku. Takie zachowanie dotyczy wszystkich aplikacji "edytorów" w których pracujemy nad jakimiś innymi plikami poprzez ich otwarcie i zapisanie. Nie będzie to dotyczyło aplikacji których działanie ogranicza się do ich interfejsu, a nie do edycji. W każdym bądź razie żeby obejść tą niedogodność, przed dyrektywą musimy zmienić tryb dopasowywania tytułów - "SetTitleMatchMode," i podać mu wartość "2" (oznacza że interesujący nas tekst może znajdować się w dowolnym miejscu tytułu okna) - wtedy dyrektywa ładnie zadziała.
Gdy napiszemy już kilka hotkeyów czy hotstringów dla różnych programów - wasz kod może wyglądać podobnie - położenie "SetTitleMatchMode" ma zastosowanie od linijki w której go umieścicie, ale nie powyżej.
Jednak dzięki temu sami wprowadzamy się na drugi haczyk - ponieważ jeśli będziemy mieli plik o nazwie "Word.txt" otwarty w notatniku, to w notatniku nasze skrypty też zadziałają (czy to dobrze czy to źle, zależy od skryptu). Spróbujmy drugiego wariantu.
Ad2. W drugim przypadku nasze powiązanie jest precyzyjniejsze - wpisujemy "ahk_exe firefox.exe" to znaczy nazwę exe'ka uruchomionego programu - tak uzupełniona dyrektywa sprawi że skrypty będą obowiązywać tylko w tej aplikacji. Problemy mogą (ale nie muszą) się pojawić gdy trafimy na oporne programy - np. Libre Office, w którym wszystkie programy pakietu jako exe mają wspólny "soffice.bin"! I cały misterny plan ... wiecie dokąd.
Bez nerwów, to też da się obejść. Trzeba użyć rozwiązania z pierwszego punktu i połączyc go z ahk_exe, "SetTitleMatchMode" będzie miał zastosowanie tylko dla LibreOffice Calc:
I to już prawie że działa :P Szkopulik jest wtedy gdy chcemy żeby działało tylko w głównym oknie aplikacji a nie w innych podokienkach, np. w dialogu zapisywania, otwierania czy drukowania. Na to mamy trzeci wariant.
Ad3. Trzeci przypadek to możliwość zaprezentowania fantastycznego skryptu instalującego się razem z AHK - WindowSpy. Jest to mały skrypt napisany w AHK wraz z interfejsem graficznym, wyświetlający więcej niż podstawowe informacje o aplikacjach
Po uruchomieniu i kliknięciu w oknie naszej niepokornej aplikacji, zaraz w pierwszych linijkach WindowsSpy pokaże nam właśnie pełny tytuł okna, klasę i exe:
d:\_BRI - dokumenty i materiały\myszka.ahk - Notepad++ ahk_class Notepad++ ahk_exe notepad++.exe
Skąd możemy skopiować sobie naszą klasę do naszej dyrektywy. Jeśli używacie skryptu z 2 epizodu to wystarczy tylko kciuk :)
Ok. Zatrzymajmy się tu. Macie dyrektywę, która pozwala na ustalenie gdzie co ma działać, jej stosowanie zależne jest od was. Jest kilka haczyków ale można dojść do właściwego powiązania stosując powyższe metody solo lub parami. Nie ma problemu żeby używać zarówno ahk_exe i ahk_class. Z moich obserwacji najczęściej (ale nie zawsze) przynosi to najlepsze (ale nie idealne) efekty.
Celowo nie rozwijam teraz dalej tematu dyrektyw jak i możliwości Win Spy - trzeba zostawić trochę materiału na przyszłość :)
Następny: Epizod 4