Přeskočit na obsah

AutoHotkey

Z Wikipedie, otevřené encyklopedie
AutoHotkey
Logo
VývojářChris Mallett, Steve Gray
První vydání10. listopadu 2003
Aktuální verzev1.1.33.02 (17. července 2020)
Operační systémWindows
PlatformaMicrosoft Windows
Vyvíjeno vC++
Typ softwaruskriptovací jazyk
LicenceGNU GPLv2
Webhttps://www.autohotkey.com/
Některá data mohou pocházet z datové položky.

AutoHotkey (často se používá zkratka AHK) je bezplatný skriptovací jazyk pro Windows. Je vhodný pro širokou škálu úkolů od tvorby malých maker až po komplexní automatizaci. Obsahuje velké množství vestavěných funkcí a používá poměrně flexibilní a velmi čitelnou syntaxi, a díky tomu je vhodný i pro méně zkušené programátory. Má rovněž aktivní komunitu v rámci vlastních fór, ale i externích stránek jako Stackoverflow a Reddit. Jedná se o open-source program, který je licencován pod GNU GPL v2. Za hlavní autory se považují Chris Mallett a Steve Gray.

Vlastnosti

[editovat | editovat zdroj]

AutoHotkey je interpretovaný, dynamicky typovaný skriptovací jazyk, jehož soubory zdrojového kódu se podle konvence ukládají s příponou ahk. Distribuce obsahuje „kompilátor“, který vytváří spustitelné EXE soubory, ty ale ve skutečnosti pouze spojují dohromady skript a potřebné běhové prostředí, tj. nedochází ke kompilaci zdrojového kódu skriptu do binární podoby. To má v porovnání s kompilovanými jazyky negativní dopad na výkon. Samotný AutoHotkey je napsaný v jazyce C++.

AutoHotkey nelze zcela považovat za objektově orientovaný jazyk, ačkoliv podporuje určité aspekty OOPobjekty a třídy, prototypy a dědičnost[1]. Struktura, kterou AutoHotkey nazývá „Object“, je ve skutečnosti kastomizovatelným asociativním polem, ne nepodobným objektům v JavaScriptu. Tato funkčnost se více rozvíjí v AutoHotkey 2, nicméně žádná z těchto vlastností není nutná pro psaní plně funkčních skriptů.

Při běhu skriptů je provozován jednoduchý Garbage Collector, který automaticky uvolňuje prostředky používané objekty, ke kterým již neexistují žádné reference. V současné době není GC schopen uvolnit cyklicky referencované objekty.

Pokud to situace vyžaduje, je možné přímo přistupovat do paměti přes ukazatele podobně jako v C. To je nutné zejména v případě, že skript komunikuje s externím DLL souborem skrze funkci DllCall.

AutoHotkey nabízí tvorbu jednoduchých GUI oken jako formulářů a pop-upů. Obsahuje běžné ovládací prvky včetně textových polí, tlačítek, posuvníků a dalších. Mimo to lze také použít ActiveX komponenty, nebo si vytvořit vlastní ovládací prvky.

Ačkoliv je možné využít AutoHotkey i k tvorbě větších aplikací (např. Scite4AutoHotkey, viz Vývojová prostředí), svoji popularitu si získal zejména pro jednoduchou automatizaci rutinních úkolů. Ty typicky sestávají z přiřazení klávesové zkratky ke spuštění funkce AutoHotkey skriptu, která poté provede akce, při kterých často převezme kontrolu nad myší a klávesnicí. AutoHotkey lze využít například k:

  • vložení znaku, který se nenachází na klávesnici;
  • vložení často používané fráze, nebo například podpisu do emailu;
  • otevření programu nebo skupiny programů;
  • automatizování rutinních úkolů jako vyplnění formuláře;
  • automatizování úloh v rámci programů;
  • prototypování předcházející implementaci v zamýšleném programovacím jazyku.

Skripty napsané v AutoHotkey mají poněkud odlišnou strukturu od klasických programů, chybí zde klasický vstupní bod programu (typicky např. funkce Main()). Celý soubor zdrojového kódu zde představuje tzv. „auto-execute“ sekci. To znamená, že při spuštění skriptu se začnou popořadě interpretovat řádky s dvěma výjimkami:

  • uživatelem definované funkce jsou přeskakovány, pokud nejsou explicitně volány;
  • klávesové zkratky (hotkey) jsou také přeskakovány a zároveň zastavují provádění kódu (můžeme si představit, že na řádku předcházejícím klávesové zkratce je return).

V AutoHotkey platí také následující pravidla:

  • názvy proměnných a funkcí nejsou case-sensitive (nezáleží na velikosti písmen);
  • proměnné nemají typ;
  • proměnné se většinou nemusí deklarovat předem (výjimku tvoří např. globální proměnné);
  • mezery jsou většinou ignorovány, kromě případů, kde by docházelo k nejednoznačnostem (např. jednořádkové komentáře, které nejsou na začátku řádku);
  • odřádkování slouží jako oddělovač příkazů (v jiných jazycích typicky středník);
    • výjimka nastává v případě, že chceme rozdělit dlouhý řádek do několika kratších, abychom zlepšili čitelnost – toho můžeme dosáhnout buď obalením řádků závorkami na samostatných řádcích, nebo započetím nového řádku operátorem (vyjma ++ a --).

Příklady

[editovat | editovat zdroj]

V následující ukázce je skript, který znázorňuje základní funkcionalitu AutoHotkey. Skript vkládá do uvozovek text, který máme označený v libovolném editovatelném textovém poli. Při spuštění čeká na stisknutí klávesové kombinace Ctrl+Shift+Q, poté se provede uvedená akce.

#SingleInstance force

global clipBackup

QuoteSelection()
{
    selection := GetSelection()  ; Získáme označený text.
    PasteText(Quote(selection))  ; Text zabalíme do uvozovek a vložíme ho zpět.

    Clipboard := clipBackup ; Vrátíme původní, "zálohovaná" data zpět do schránky.
}

GetSelection(timeoutSeconds := 0.5)
{
    clipBackup := ClipboardAll ; Provedeme "zálohu" dat ve schránce, abychom nenarušili uživatelovu práci.

    Clipboard := ""  ; Vymažeme schránku, abychom mohli dále použít ClipWait
    SendInput ^c  ; Posíláme zkratku Ctrl+C, abychom nahráli data do schránky.
    ClipWait %timeoutSeconds% ; Čekáme, dokud data nejsou ve schránce.
    return Clipboard
}

PasteText(selectedText)
{
    SendInput %selectedText% ; Vložíme obsah proměnné selectedText na místo označeného textu.
}

Quote(selectedText)
{
    ; Obsah proměnné selectedText obalíme uvozovkami.
    return """" . selectedText . """"
}

^+q::QuoteSelection()   ; Při stisknutí kombinace Ctrl+Shift+Q voláme funkci QuoteSelection().

V úvodu na prvním řádku je direktiva, která v tomto případě značí, že může běžet pouze jediná instance skriptu. Následuje deklarace globální proměnné a dále uživatelsky definované funkce. Na posledním řádku skriptu je „vstupní bod“ skriptu, tedy stisk klávesové kombinace Ctrl+Shift+Q.

Vývojová prostředí

[editovat | editovat zdroj]

Na vývoj v AutoHotkey není potřeba specializované vývojové prostředí, postačí libovolný textový editor, včetně Windows Notepadu. Je však výhodné pracovat s pokročilejším editorem, který nabídne různá zvýraznění, doplňování textu, nápovědy apod.

Nejpopulárnější editor pro AutoHotkey, který je téměř možné označit za IDE, je SciTE4AutoHotkey. Je to rychlý editor založený na SciTE (Scintilla)[2], který obsahuje velké množství funkcionalit, jako:

  • zvýrazňování syntaxe,
  • IntelliSense,
  • automatické doplňování,
  • automatické odsazování,
  • integraci AutoHotkey nápovědy,
  • zkratky (snippety),
  • makra,
  • interaktivní debugování.

Pro ostatní obecně oblíbené editory (například Visual Studio Code, Notepad++, PSPad) existují rozšíření, která je lépe přizpůsobí pro psaní skriptů v AutoHotkey.

Jazyk AutoHotkey vznikl jako odnož skriptovacího jazyku AutoIt v2 v roce 2003. V té době došlo k neshodě v AutoIt komunitě, kdy budoucí autor AutoHotkey, Chris Mallett, chtěl do AutoIt integrovat lepší podporu klávesových zkratek a obecně automatizace práce s klávesnicí a myší. Většina vývojářů AutoIt nechtěla tuto funkcionalitu podporovat, protože by zvýšila počty falešných poplachů antivirů na jejich program[3].

Chris Mallett tedy začal psát vlastní skriptovací jazyk od základů, se syntaxí inspirovanou AutoIt v2 a později přebíráním kódu z AutoIt3, jehož kompilátor a další utility byly rovněž použity[4].

V roce 2010 se začala více prosazovat AutoHotkey 1.1 (také známá jako AutoHotkey_L), když původní autor Chris Mallett ztratil motivaci AutoHotkey dále rozvíjet. Vývoj AutoHotkey_L zahájil Steve „Lexikos“ Gray; a právě větev AutoHotkey_L se v roce 2012 stala oficiální[5].

  1. Objects - Definition & Usage | AutoHotkey. www.autohotkey.com [online]. [cit. 2020-12-25]. Dostupné online. 
  2. SciTE4AutoHotkey. fincs.ahk4.net [online]. [cit. 2020-12-25]. Dostupné v archivu pořízeném z originálu dne 2020-12-21. 
  3. Where did you hear about Autohotkey? - Page 2 - Offtopic. AutoHotkey Community [online]. [cit. 2020-12-25]. Dostupné online. (anglicky) 
  4. Three thumbs up! - Offtopic. AutoHotkey Community [online]. [cit. 2020-12-25]. Dostupné online. (anglicky) 
  5. The AutoHotkey Foundation : Our History. www.autohotkey.com [online]. [cit. 2020-12-25]. Dostupné online.