AutoHotKey
Jedním z řady programů, bez kterých si umím svoje PC jen obtížně představit, je AutoHotKey – free nástroj pro vytváření hotkeys, přemapovávání kláves i obecné psaní skriptů. Od ostatních programů tohoto typu se liší zejména svým přístupem – místo na sestavě povolených operací je založen na vlastním skriptovacím jazyce, ve kterém si jeho uživatel může napsat skoro cokoliv – pokud to umí.
Všechno kolem AutoHotKey se točí kolem jeho skriptovacího jazyka, který vychází z jazyka AutoIt Script. To ovšem mimo jiné znamená, že než můžete AutoHotKey rozumně použít, musíte se neučit aspoň základy nového programovacího jazyka – rozhodně to není o tom, že sednete, nainstalujete a za tři minuty už vám program bude pomáhat. Navíc vám AutoHotKey hned na začátku hodí pořádný klacek pod nohy tím, že používá velmi specifickou syntaxi, která se vyznačuje pojetím „jeden příkaz = jeden řádek“ a nepoužíváním závorek, pokud je jde krkolomně obejít. Krátký příklad:
SetTitleMatchMode, 1 WinWait, Jetico Personal Firewall -, , 0.5 Sleep, 500 WinHide
Příkazy jsou obecně zapisovány ve tvaru příkaz, parametr1, parametr2, ...
, přičemž parametry jde na libovolné pozici i vynechávat, pokud existuje nějaký rozumný default. Postupem času se ovšem ukázalo, že tato syntaxe zdaleka nepostačí pro všechny případy, například pro uživatelsky definované funkce, takže dnes už AutoHotKey podporuje i „tradiční“ syntaxi příkaz ( parametr1, parametr 2, ...)
– ovšem s tím, že tyto syntaxe nejsou vždy plně zaměnitelné, jsou místa, kde lze použít jen jednu z nich. Přehlednosti to moc neprospívá.
Relativně běžný skript (byť v neobvyklé syntaxi a s neobvyklými příkazy) pak dále zesložiťují konstrukty, které umožňují snadno reagovat na události vstupující zvenčí (protože to je jeden z hlavních účelů AutoHotKey): Můžete reagovat na stisknuté klávesy (přičemž kromě úplného skriptu existují i zkrácené zápisy pro nahrazování jedné klávesy druhou apod.), operace s myší, ale také třeba odchytávat a zpracovávat zprávy Windows – to vše globálně pro všechny aplikace nebo jen pro jednu aplikaci, nebo třeba i pro jedno konkrétní okno jedné konkrétní aplikace. Možností je skutečně mnoho, s trochou snahy dokážete pomocí jednoho skriptu nahradit desítku nejrůznějších aplikací – zejména nejrůznější ovladače klávesnice a myši můžete po zvládnutí AutoHotKey všechny zahodit (a za sebe říkám, zahodil jsem je rád – tak špatně naprogramované aplikace jako ty, které i věhlasní výrobci dodávají ke svým vstupním zařízením, se jen tak nevidí).
Není mým cílem vysvětlovat zde syntaxi a možnosti jazyka, ale rád bych uvedl několik ukázek drobných užitečných skriptů:
Páté tlačítko myši zavře okno prohlížeče
Microsoft ve své neskonalé moudrosti stanovil, že čtvrté a páté tlačítko myši bude provádět operace Zpět a Dopředu v prohlížeči. Nevím jak vy, ale já „Dopředu“ používám tak asi jednou za půl roku. Nešlo by přemapovat na jinou funkci, třeba na zavření aktuálního panelu, které používám podstatně častěji? Šlo:
; Firefox poznám podle toho, že jeho okno má třídu MozillaUIWindowClass #IfWinActive, ahk_class MozillaUIWindowClass ; Páté myší tlačítko XButton2:: ; Nasimuluj stisk klávesové kombinace CTRL+W Send, ^w Return ; Konec Firefox sekce. Začíná sekce pro Operu #IfWinActive, ahk_class OpWindow XButton2:: Send, ^w Return ; Ještě jednou to samé pro Internet Explorer #IfWinActive, ahk_class IEFrame XButton2:: Send, ^w Return ; Konec aplikačních sekcí #IfWinActive
Páté myší tlačítko mimo prohlížeč
Občas také používám aplikace, ve kterých Zpět a Dopředu nemají smysl. I v nich se dá čtvrté a páté myší tlačítko použít – třeba na maximalizaci aktivního okna a ukončení aplikace:
XButton1:: WinMaximize, A Return XButton2:: WinClose, A Return
Protože skript leží mimo #IfWinActive
, provede se pro všechny aplikace, které už neměly myší tlačítka zpracována dříve. Ideální tedy je napřed napsat všechny možné obsluhy pro různé aplikace (třeba skok na další kapitolu/soubor ve vašem oblíbeném přehrávači médií) a pak všem ostatním aplikacím stanovit nějaké vhodné výchozí chování.
Vlastní klávesové zkratky
Těžiště AutoHotKey je, aspoň pro mě, ve vlastních klávesových (a myších – všechno, co jde dělat s klávesnicí, lze obdobně provést i s myší) zkratkách. Dále uvedu několik z těch, které používám. Řada z nich pro svou funkci používá další aplikace, u kterých jsem si ale dával pozor na to, aby byly zdarma (aspoň pro domácí použití) a aby fungovaly dávkově z příkazové řádky (tzn. většinu času jsou vypnuté, aktivují se jen na vyžádání a hned zase skončí).
Přemapování kláves na notebooku
Notebookové klávesnice jsou notoricky špatné v tom, jak mají rozmístěné klávesy. Například moje Lenovo má klávesnici docela dobrou, ale hned vedle kurzorových kláves cpe naprosto zbytečná tlačítka pro Dopředu a Zpět. Přemapovávám je na Home a End, které jsou mnohem užitečnější:
Browser_Back::Home Browser_Forward::End
Windowsovská tlačítka
Moc dobře si pamatuji, jak se po příchodu Windows 95 začaly objevovat klávesnice s Windowsovskými klávesami WIN
a MENU
a jak jsem nad nimi prskal. To mi do značné míry vydrželo až dodnes – naučil jsem se žít s WIN
(které je používané minimálně a tak se mi hodí do mnou definovaných klávesových zkratek), ale stále špatně nesu úplně zbytečné MENU
(od čeho máme SHIFT+F10
?) a samostatně zmáčknuté WIN
(CTRL+ESC
). Pomocí AutoHotKey jde tyto klávesy celkem snadno úplně zablokovat přemapováním na něco jiného (třeba pravý/levý CTRL
), ale jde udělat i velmi užitečnou „zběsilost“, při které tlačítko WIN
funguje ve zkratkách úplně normálně ale samostatně nereaguje vůbec:
; Disable WinMenu key functionality AppsKey::RCtrl ; Disable standalone Windows key functionality (enable Win+anything) ~LWin UP:: Send, {Blind}{Shift} Return
(Ta vlnovka u LWin UP
říká, že obsluha nemá klávesu „sežrat“ ale nechat ji projít dál k dalším zkratkám.)
Využití extra kláves
Pokud máte klávesnici s celou spoustou extra tlačítek (třeba tlačítka Excel
a Word
, úžasně užitečná pro ty z nás, kdo tyto aplikace nepoužíváme), drtivou většinu jich jde předefinovat – stačí si zjistit jejich scan kód (k tomu má AutoHotKey ve svém menu funkci „View -> Key history“) a pak jim můžete nadefinovat, co chcete. Třeba z Excel
u udělat ENTER
:
; "Excel" key works like ENTER SC102::Enter
(V tomto případě jsem si zjistil, že na mé klávesnici má tlačítko Excel
scan kód 102.)
Ovládání hlasitosti myším kolečkem
Tohle je dost oblíbená funkce v mediálních přehrávačích, ale proč ji nemít i ve všech ostatních programech? Ovšem radši na WIN+kolečko
, aby se to nepletlo do běžné funkce:
#WheelUp:: SoundSet, +10, "MASTER", VOLUME return #WheelDown:: SoundSet, -10, "MASTER", VOLUME return
Takhle to bohužel od Vist dál nefunguje, protože Microsoft zapracoval na samostatném nastavení hlasitosti pro každou aplikaci zvlášť a udělal to úplně debilně. Existuje i globální řešení, ovšem je to skript na deset stránek.
Vypnutí monitoru
Klávesové kombinace s WIN
se výborně hodí na operace, které chci mít přístupné ze všech aplikací, ale současně nechci, aby rušily ostatní programy. Zde máte vypnutí monitoru na klávesu WIN+Q
(používá utilitu NirCmd):
#q:: Run, nircmd.exe cmdwait 500 monitor off return
Otáčení obrazu monitoru
Tento skript umožní otočit obraz monitoru o 90° doleva nebo doprava po stisknutí klávesy WIN+šipka vlevo
resp. WIN+šipka vpravo
. Vlastní otočení je realizováno utilitou iRotate, funkce se proto chová stejně na všech podporovaných (což jsou dnes už všechny „živé“) grafických kartách:
#Left:: Run, irotate.exe /rotate=0 /exit return #Right:: Run, irotate.exe /rotate=90 /exit return
Skrytí okna aplikace
Jsou aplikace, které při svém spuštění zobrazí okno a ignorují nastavení příslušného zástupce, který po nich žádá minimalizaci. Za jistých okolností, třeba když to okno potřebuji minimalizovat ve stejnou chvíli jako když spouštím AutoHotKey, se to dá vyřešit jednoduchým skriptem:
; Okno hledám podle jeho názvu SetTitleMatchMode, 1 ; Chvíli počkám, protože nevím, jestli se skript spustil před nebo po aplikaci WinWait, Jetico Personal Firewall -, , 0.5 Sleep, 500 ; Skryji nalezené okno WinHide
Reakce na usnutí a probuzení počítače
; Zaregistrovat obsluhu Windows zprávy WM_POWERBROADCAST (kód 0x218) OnMessage(0x218, "WM_POWERBROADCAST") Return ; Funkce WM_POWERBROADCAST() zprávu zpracuje WM_POWERBROADCAST(wParam, lParam) { ; V wParam je důvod zprávy. ; PBT_APMQUERYSUSPEND (= 0) volají Windows předtím, než usnou ; PBT_APMRESUMESUSPEND (= 7) volají Windows poté, co se probudí ; Zavoláme jednu aplikaci při usnutí a jinou při probuzení: If (wParam == 0) { RunWait, C:\usni.exe parametry prikazove radky Return true } Else If (wParam = 7) { Run, C:\probud.exe, , Max } }
V obsluze samozřejmě můžete dělat cokoliv, ne jen volat nějaký exáč. Nabízí se třeba možnost před usnutím zazálohovat klíčové soubory nebo odpojit šifrované kontejnery.
Zrychlené cheatování ve hrách
AutoHotKey často zabere i přímo ve hrách, kde si tak můžete na jednu klávesu namapovat celá makra. Například uložení aktuální pozice v Heroes of Might & Magic IV na jednu klávesu (CTRL+S
):
^s:: ; Do kolikáté pozice zapisovat H4_CisloPozice = 1 ; Zapamatvat si pozici kurzoru MouseGetPos, H4_x, H4_y SetKeyDelay, 10 ; ALT+S Send, !s Sleep, 100 ; Kliknout nad zadanou pozici (počítáno pro rozlišení 1024x768) H4_pos := 220 + 36 * H4_CisloPozice MouseClick, Left, 370, %H4_pos% ; Kliknout nad tlačítkem "Save" MouseClick, Left, 770, 660 ; Vrátit kurzor na původní pozici MouseMove, %H4_x%, %H4_y% ; Odklepnout hlášku "OK" Send, {Enter} return
Ale jdou dělat i makra:
f10:: SetKeyDelay, 10 Send, {Tab}nwcares{Enter} Return
A funguje to i na akčnějších hrách (např. rychlý úskok stranou v Unreal Tournamentu):
#IfWinActive, Unreal Tournament Q:: Send, A Send, A Return E:: Send, D Send, D Return #IfWinActive
Možností je prostě spousta, a to jsem se ani nezmínil o řadě oblastí, které AutoHotKey také řeší. Mimo jiné v něm jde vytvářet vlastní grafická okna, takže není problém obsluhu hlasitosti (viz výše) doplnit i o vizuální odezvu (zobrazí se proužek udávající aktuální hodnotu hlasitosti a po chvilce zmizí) nebo se vyblbnout i s dost složitými operacemi (udělal jsem si kdysi skript, který z aktivního okna Internet Exploreru vytáhl všechny odkazy, zobrazil jejich seznam v samostatném okně, nechal uživatele libovolné množství z nich vybrat a pak je postupně všechny stáhnul WGETem). Ale většinou si vystačím s jednoduchými variacemi na to, co už jsem ukázal výše.
Nasiel som variantu na YTD v Autohotkey, koho by zaujimalo.
https://akshaycrazzy.github.io/YouTubeDownloader-AHK/
To opravdu netuším. Ani jsem to nikdy nehledal, pro programování čehokoliv je dost nutností angličtina.
Zdravim, nevie niekto prosim o nejakom CZ alebo SK .pdf manuali na programovanie v Autohotkey? Dakujem.
Zdravím a dovoluji si dodat. Je to skvělý program. Svého času jsem jej využíval v práci. Ale svým způsobem. V nočních hodinách nebo přes víkendy, tedy během mé nepřítomnosti. Spouštěl jsem jej automaticky v potřebný čas. Nahrával jsem totiž různé rozhlasové hry z BBC nebo z Deutschlandfunku. Totiž ty pořady, které byly vysílány jenom živě, a které nebylo již možno později nijak natáhnout. Program v daný čas na příslušných stránkách spustil stream, současně spustil program SoundForge (tedy nahrávání do filu), po odměřeném čase stream ukončil, audio file uložil, odeslal mi na mobil zprávu o svém úspěšném průběhu, pak se sám ukončil a vypnul počítač. Přiznám se, že mi to docela bavilo. Stahoval jsem automaticky rovněž řadu knížek z různých univerzit, kde bylo možno některé knihy číst jen graficky – po stránkách. Rozesílal jsem dávky nejrůznějších mejlů (ve smyčce). Autohotkey umožňuje i vesele spamovat. Apod.
Dnes jsem už vychladl. Nicméně někdy ještě uvažuji o možnosti dálkového spouštění programu. Nikoli v daný čas, to samozřejmě není problém. Uvažuji o okamžité reakci, třeba na příchod mejlu. V práci jsme měli Outlook, ve kterém bylo možno nastavit – chvilkovou změnu tvaru kurzoru po příchodu mejlu. SeTimerem pak bylo možno pohodlně tuto změnu detekovat, a – automaticky reagovat. Používám teď ale Mozzilu Thunderbird a tam se avizo příchodu mejlu dá nastavit jenom na krátké objevení se malého obrázku a/nebo spuštění nějakého audiofilu. A i když malý obrázek patří do „ahk_class MozillaUIWindowClass“, k automatické detekci příchozího mejlu to nepomáhá. V Mozille se mi reakci naprogramovat nedaří.
Moc kecám. Přeji hodně zdaru.
Jirka