Aktualizace: 7.1.2007
Autor: Pavel Kříž
AutoIt 3 je jednoduchý
skriptovací jazyk, pomocí kterého lze
zautomatizovat spoustu činností v grafickém rozhraní
Windows. Jedná se o kompletní vývojové prostředí s
vlastním jazykem AutoIt 3 a bohatou nápovědou se
spoustou vzorových řešení.
Programům v jazyku AutoIt říkáme skripty (textový
soubor s příponou au3). Jsou určeny většinou pro řešení
konkrétních úloh ve Windows; jazyk AutoIt je podobný
moderním programovacím jazykům (např. Pascal). Skripty
psané v AutoItu lze i velice jednoduše kompilovat do
spustitelného souboru (.exe), tj. na počítači kde se
bude tento program spouštět není nutné mít AutoIt
nainstalován.
Skript mimo jiné dokáže:
spouštět aplikace (programy) ve Windows
simulovat stisknutí kláves
simulovat pohyb a stisknutí tlačítka myši
manipulovat s okny (přesun, změna velikosti)
přímo manipulovat s prvky okna (např. zjistit nebo zadat
text, …)
* Tento článek si klade za cíl jen seznámení s
prostředím a jazykem AutoIt, nejedná se o náhradu
nápovědy dodané s programem ani kompletní výčet možností
práce s AutoItem...
V čem psát skripty?
Protože skript je obyčejný textový soubor, jsou vhodné
jednoduché textové editory, které ukládají text bez
formátování. Můžeme tedy použít Poznámkový blok nebo
další textové editory jako TextPad, UltraEdit nebo
výborný free český editor
PSPad. Každý skript
uložíme s příponou .au3
Stručný úvod do jazyka AutoIt
* Jedná se opravdu jen o velmi stručný úvod a nejde
o učebnici programování! Článek si klade za cíl jen
informativní seznámení...
Datové typy:
AutoIt používá jen jeden datový typ variant, který může
obsahovat číselné hodnoty a „znakové hodnoty“, tedy
řetězce (příkladem řetězce je „tento text“). Řetězec
vždy zapisujeme do uvozovek.
* Datový typ určuje typ uložené hodnoty v
proměnné (viz dále) a možné operace s ní. Např. v
Pascalu máme datový typ char, proměnná typu char
může obsahovat právě jeden znak; pro uložení textových
řetězců zase slouží datový typ string. Jiným
datovým typem v Pascalu je integer, určený pro
uložení celého čísla. Dalším datovým typem (opět v
Pascalu) je boolean, pro uchování logické hodnoty
pravda/nepravda (true/false). Naproti tomu v AutoItu je
„univerzální“ datový typ variant, proměnná může
obsahovat „cokoli“, tj. text, číslo, logickou hodnotu...
Proměnné:
Proměnná je místo v operační paměti RAM, která je
určitého typu (v AutoItu existujr pouze univerzální typ
variant) a obsahuje konkrétní hodnotu. Proměnná má svůj
identifikátor (název) uvozený znakem $ („dolar“), např.:
$datum, $pocet, $index a svoji
hodnotu („obsah“). Proměnné se v AutoItu nemusí
deklarovat (deklarace proměnných tedy na rozdíl od
jiných programovacích jazyků není povinná, obecně se ale
doporučuje). Deklarací proměnné se myslí takový zápis ve
skriptu, kdy „zavádíme“ novou proměnnou jedním ze 4
možných způsobů deklarace pomocí klíčových slov Dim,
Global, Local a Const. Pokud deklarujeme konstantu (Const),
nelze ve skriptu měnit její hodnotu.
Pro názornost deklarace několika proměnných a konstant:
Dim $a, $b, $c – deklarování tří proměnných,
jejich hodnota není zatím definována
Dim $a = 2, $b, $c = 20 – proměnné $a a $c jsou
inicializovány (mají přiřazenu výchozí hodnotu; nejedná
se však o konstanty), hodnota proměnné $b není zatím
definována
Const $a = 2, $b = „Hi“, $c = 20 – deklarace tří
konstant
* Jazyk AutoIt je case-insensitive, tj.
nerozlišují se malá a velká písmena v názvech proměnných
a funkcí.
* Z matematiky známe např. proměnnou x.
Počítáme-li lineární rovnici, je výsledek určitá
konkrétní hodnota proměnné x. Např. 2*x-2 = 0 vyřešíme
jako x = 1. Stejně tak lze vyčíslit hodnotu výrazu
4*x-8, jestliže víme, že x = 5. Ve skriptech tedy
používáme proměnnou tam, kde je nutné použít určitou
hodnotu (ať už číslo, textový řetězec, logickou
hodnotu), která není známa při psaní skriptu, ale
hodnota této proměnné se určí např. výpočtem, zadáním
uživatelem, zjištěním ze souboru atd.
Makra:
Makro je speciální proměnná určená pouze ke čtení (lze
tedy zjistit její hodnotu, „obsah“, ale nelze ji
změnit), uvozené speciálním znakem @ („zavináč“).
Příkladem je třeba makro @ComputerName obsahující
název počítače, @DeskTopDepth udávající bitovou
barevnou hloubku, @Year obsahující čtyřznakové
označení aktuálního roku (např. 2006).
* Makro se používá v podstatě stejně jako
proměnná, avšak s tím rozdílem, že do makra nemůžeme (na
rozdíl od proměnné) přiřadit vlastní hodnotu.
Operátory:
Operátory umožňují provádět s proměnnými aritmetické a
logické operace, např. (jsou uvedeny jen některé
operátory; konkrétní použití viz nápověda).:
+, -, *, /, NOT, =, <, >=, AND, OR
Podmíněné příkazy:
Aby bylo možné ve skriptech větvení programu, jsou
použity podmíněné příkazy; AutoIt nabízí dvě konstrukce
a to
If … Then … Else – If podmínka Then příkaz1 Else
příkaz2
Select … Case
Select
Case podmínka1 příkaz1
Case podmínka2 příkaz2
…
Case podmínkaN příkazN
EndSelect
* Normálně program (skript) provádí příkazy v tom
pořadí, jak jsou zapsány od začátku do konce skriptu.
Velmi často však musíme reagovat na určité podmínky a
přizpůsobit jim „běh“ programu. V takovém případě
používáme podmíněné příkazy.
Cykly:
Cyklus slouží k opakování (jednoho nebo více) příkazů
při provádění skriptu.
For … Next – cyklus se známým počtem opakování
(při programování víme, kolikrát se má cyklus provést).
For $proměnná = počáteční_hodnota to konečná_hodnota
příkaz(y) Next
* Např. cyklus, který se provede desetkrát
(řídící proměnná cyklu je i, nejprve má hodnotu 1, v
každém průběhu cyklu se o jedničku zvýší, poslední běh
cyklu se provede s hodnotou 10)
For i=$1 to 10
nějaký_příkaz
Next
While … WEnd – cyklus s neznámým počtem opakování
s podmínkou na začátku cyklu; příkazy uvnitř cyklu se
provádí tak dlouho, dokud je splněna podmínka za While.
While podmínka příkaz(y) WEnd. Podmínka se testuje vždy
na začátku cyklu, pokud není splněna, příkazy uvnitř
cyklu se neprovedou a skript pokračuje následujícím
příkazem za WEnd.
Pozn.: Např. cyklus, který se bude provádět tak dlouho
(neznáme počet opakování), dokud proměnná $cislo bude
větší než nula.
While $cislo > 0
nějaký_příkaz
WEnd
Do … Until - cyklus s neznámým počtem opakování s
podmínkou na konci cyklu; příkazy uvnitř cyklu se
provádí tak dlouho, dokud je splněna podmínka za Until.
Do příkaz(y) Until podmínka. Podmínka se testuje vždy na
konci cyklu, pokud není splněna, příkazy uvnitř cyklu se
již znovu neprovedou a skript pokračuje následujícím
příkazem za Until. Tento cyklus se provede vždy nejméně
jednou.
* Cyklus se bude provádět do té doby, než
proměnná počet nabude hodnoty 10
Do
nějaký_příkaz
Until $pocet = 10
Funkce:
Funkce jsou ucelené části kódu, které mohou být kdykoli
volány; každá funkce vrací hodnotu (i když jsou případy,
kdy se toho nevyužívá). AutoIt rozděluje funkce na
vestavěné (vytvořené autorem jazyka AutoIt) a
uživatelsky definované (naše vlastní funkce). Funkce má
svůj identifikátor (název) a kulaté závorky, do kterých
se zapisuje výraz (argument funkce), např. Abs
($proměnná) vrací absolutní hodnotu. Nejčastější způsob
volání funkce je takový, kdy proměnné přiřadíme hodnotu
vrácenou funkcí, kterou voláme, např. $proměnná =
funkce(argument1, argument2)
* Z matematiky známe funkci y = sin(x).
Proměnná y je tzv. funkční hodnota („to co vrátí
funkce“), sin je funkce sinus a x je
argumentem funkce. Tj. „voláme“ funkci sinus s
argumentem x (za x dosadíme konkrétní číslo) a funkce
nám vrátí jinou číselnou hodnotu (y), která je sinem
čísla x.
Pole:
Hodně funkcí vrací výsledek ve formě pole. Zjednodušeně
řečeno je pole datová struktura n prvků pole přístupných
přes index pole, zapsaný v hranatých závorkách za názvem
pole. Například názvy jednotlivých dnů v týdnu si můžeme
představit jako prvky pole týden:
$týden[1]=“Po“
$týden[2]=“Út“
$týden[3]=“St“
…
$týden[7]=“Ne“
Komentáře:
Pro snadnější orientaci ve skriptu je dobré vpisovat
komentáře; nejedná se o příkazy skriptu, ale o poznámky
programátora. Řádek komentáře začíná buď znakem ;
(„středník“) nebo # („dvojitý kříž“). Text do konce
řádku je ignorován.
Příklady skriptů:
Na závěr si uvedeme několik příkladů skriptů, které
budou demonstrovat schopnost AutoItu. Nejdříve se
seznámíme s funkcí MsgBox(), která vytvoří
jednoduché dialogové okno se zprávou (toho budeme ve
skriptech využívat nejčastěji). Celá syntaxe (tvar
zápisu) vypadá následovně:
MsgBox ( flag, "title", "text" [, timeout] )
Prvním argumentem je flag, který určuje typ
dialogu a zejména tlačítka: může nabývat hodnot např. 0
(tlačítko OK), 1 (OK a Storno), 3 (Ano, Ne, Storno),
atd. (viz nápověda k funkci MsgBox).
Druhým argumentem je název okna, title. Jedná se
o textový řetězec (zapisujeme do uvozovek), který se
zobrazí v titulním pruhu okna.
Třetím argumentem je obsah zprávy, kterou sdělujeme
uživateli. Může se jednat o prostý text (méně časté)
nebo v kombinaci s proměnnými o sdělení určité hodnoty
(daleko častější případ).
Čtvrtý argument je nepovinný (v zápisu syntaxe je v
hranatých závorkách) a udává počet sekund, kdy bude
zpráva zobrazena. Není-li uveden, dialogové okno se
zprávou se zavře až klepnutím uživatele na příslušné
tlačítko.
a). zobrazení textové hodnoty v dialogovém okně
(text.au3)
; Ukázka použití funkce MsgBox () vypsáním textové
hodnoty
MsgBox (0, "skript text.au3", "www.craftcom.net")
b). zobrazení hodnoty proměnné v dialogovém okně (prom.au3)
; Ukázka použití funkce MsgBox () vypsáním hodnoty
proměnné
; do proměnné $text přiřadíme textovou hodnotu (textový
řetězec) "www.craftcom.net"
; do proměnné $rok přiřadíme aktuální rok využitím makra
@Year
$text = "www.craftcom.net"
; Ve funkci MsgBox použijeme operátor & pro spojení
celkem tří řetězců:
; první je uložen v proměnné $text, druhý je mezera
(zapsaná do uvozovek),
; třetí je makro @Year, které vrací aktuální rok jako
textovou hodnotu
MsgBox (0, "skript prom.au3", $text & " " & @Year)
c). zjištění velikosti operační paměti RAM (memory.au3)
; Ukázka použití funkce MemGetStats() a zobrazení obsahu
okna ve více řádcích
; Funkce MemGetStats() vrací pole hodnot s následujícím
významem
; $array[0] = Memory Load (Percentage of memory in use)
... Procento obsazené RAM
; $array[1] = Total physical RAM ... Celková RAM
; $array[2] = Available physical RAM ... Volná fyzická
RAM
; $array[3] = Total Pagefile ... Velikost swap souboru
; $array[4] = Available Pagefile ... Volné místo swap
souboru
; $array[5] = Total virtual ... Celková virtuální paměť
= Celková RAM + Velikost swap
; $array[6] = Available virtual ... Volná virtuální
paměť
; All memory sizes are in kilobytes. ... Všechny hodnoty
jsou v kilobajtech
; Do proměnné Memory se uloží výsledek volání funkce
MemGetStats; výsledek je pole 7 hodnot
; Každá hodnota je přístupná přes index pole, např.
volná fyzická paměť je dostupná přes index s hodnotou 2,
tj. $Memory[2]
; Makro @CRLF slouží k odřádkování
$Memory = MemGetStats()
MsgBox (0, "skript paměť.au3", "Celková RAM: " & $Memory[1]
& " kB" & @CRLF & "Volná RAM: "& $Memory[2] & " kB" & @CRLF)
d). vypsání aktuálního data a času
; Ukázka použití maker pro získání data a času
MsgBox (0, "skript datum.au3", "Aktuální datum " & @Year
& " " & @Mon & " " & @MDay & @CRLF & "Aktuální čas " & @Hour
& ":" & @Min & ":" & @Sec)
* Pozor na zalamování řádků při vkládání skriptů do
textového editoru (Poznámkový blok, PSPad, …), tj. pokud
odkudkoli vkládáte zdrojový text skriptu, dejte si pozor
na konce řádků (aby každý příkaz byl na samostatném
řádku a nikoli rozdělen na dva nebo více řádků).
Kompilování skriptů (au3 -> exe)
Pokud máme skript ve zdrojovém tvaru (textový soubor s
příponou au3 zapsaný v jazyku AutoIt 3), můžeme ho
spouštět jen na počítači, kde je AutoIt nainstalován.
Aby byl skript spustitelný na libovolném počítači s
WinXP, lze ho jednoduše zkompilovat do spustitelného
souboru (s příponou exe). To můžeme např. provést tak,
že klepneme pravým tlačítkem na soubor s naším skriptem
(souboro s příponou .au3) a z kontextové nabídky zvolíme
příkaz Compile Script. Tím se nám vytvoří spustitelný
soubor (.exe), který lze spouštět na libovolném počítači
(s operačním systémem Windows).
Pěkné programování přeje Pavel :-)