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í.

AutoHotKey - hlavní okno

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 Excelu 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.

Podobné příspěvky:

4 Responses to “AutoHotKey”

  1. avatar mirob napsal:

    Nasiel som variantu na YTD v Autohotkey, koho by zaujimalo.

    https://akshaycrazzy.github.io/YouTubeDownloader-AHK/

  2. avatar pepak napsal:

    To opravdu netuším. Ani jsem to nikdy nehledal, pro programování čehokoliv je dost nutností angličtina.

  3. avatar mirob napsal:

    Zdravim, nevie niekto prosim o nejakom CZ alebo SK .pdf manuali na programovanie v Autohotkey? Dakujem.

  4. avatar Jirka napsal:

    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

Leave a Reply

Themocracy iconWordPress Themes

css.php