Nekoliko starejši bralci se morda še spomnijo svojih podvigov z avtomobili. Najrazličnejši posegi ob pomoči kolegov v domači garaži niso bili nič posebnega. Danes pa za večino stvari poskrbijo na servisu. Nekateri (beri: stara šola) še kdaj pogledamo pod pokrov in preverimo stanje olja, drugih tekočin ali zamenjamo pregorelo žarnico. Tu pa se največkrat tudi konča. Podobno velja v svetu računalništva. Dejstvo je, da smo tudi na tem področju postali potrošniki. Marsikateri mlajši uporabnik nikoli ni pokukal zunaj grafičnega vmesnika okenskega okolja (so tudi svetle izjeme, ki različne OS-e obvladajo do »fundamentov« in zaslužijo vso pohvalo). Nekoliko starejši pa s(m)o se v veliki meri polenili, saj je na spletnih straneh mogoče najti skorajda vse – včasih celo brezplačno. Zakaj se torej mučiti z razvojem, če je vse že pri roki ? Uporabniki se prepogosto ne želijo učiti. Tisti pa, ki so nekoč že znali narediti določene stvari, jih vse prevečkrat, če je le mogoče, še vedno počnejo »po starem«. Večina je zato zelo redko kreativna, tudi če bi to zahtevalo le nekaj vrstic kode.

Za lažje delo je smiselno uporabiti urejevalnik SciTE.

RAD BI SE NAUČIL

Zavedam se, da je brez ustreznega predznanja vsak začetek težak. Morda ste imeli željo, da bi se takšnega ali drugačnega pisanja kode naučili. V tem primeru ste si verjetno omislili kakšno knjigo, ki ima v naslovu besede »... za telebane« ali pa »v 24 urah ...«. Knjigo ste z navdušenjem začeli brati, prepisali nekaj zgledov, čez čas pa ugotovili, da je zadeva prezahtevna in vse skupaj opustili. Zadeva je logična sama po sebi – obrti, s katero se mojstri ukvarjajo leta, ni mogoče zajeti z eno ali dvema »kuharskima« knjigama.

Tokrat pa se poskusimo zadeve lotiti drugače. Podobno kot pri uničevalcih mitov (MythBusters – www.discoverychannel.co.uk/web/mythbusters/) bom poskusil ovreči ali dokazati trditev, da se lahko računalniško pismena oseba brez posebnega predznanja pisanja kode »naučiti« pisanja te v nekaj urah oziroma popoldnevih. V tem času seveda ne boste postali strokovnjak, ampak boste na podlagi navedenih primerov razumeli glavne mehanizme in, če vam je to všeč, nadaljevali učenje. Vsega skupaj se bomo lotiti čim manj velikopotezno, saj s tem povečujemo možnost za uspeh. Zavedati se moramo, da vsaka vrsta dela zahteva svoje orodje, zato nam lahko izbor ustreznega/primernega pripomočka olajša reševanje problematike. Ker se je na eno področje pač treba osredotočiti, želimo pa da ima naše početje tudi uporabno vrednost (ne bo samo sebi namen), smo si izbrali področje »avtomatizacije« različnih opravil.

Vrstica za izpis okna z besedilom

BREZPLAČEN IN PREPROST

Zaradi prej navedenih potreb smo izbrali AutoIt. Pomembno je, da gre za popolnoma brezplačen (razvijalci pa bodo veseli vsake donacije) skriptni jezik, ki je podoben basicu in je razvit z namenom avtomatizacije različnih procesov v okolju Windows. Podprte so vse različice okenskega okolja od vključno Windows 95 dalje. Zaradi podobnosti z basicom je AutoItova sintaksa razmeroma preprosta. Podprta je manipulacija z okni in procesi, različni tipi simulacij (npr. pritiska tipke), podpora različnim uporabniškim funkcijam, preprosti izgradnji uporabniških vmesnikov. Seznam bi lahko še nadaljevali, končajmo pa z možnostjo komunikacije AutoItovih skriptov z zunanjim okoljem (drugi programi), možnostjo uporabniške razširitve AutoIta in nikakor ne na koncu – svoje AutoItove skripte lahko prevedemo v izvršljive datoteke *.exe

AutoIt je zelo majhen. Prenesemo ga lahko s spletne strani www.autoitscript.com/autoit3/downloads.shtml, izbrali pa smo polno namestitev – AutoIt Full Installation (velikost 6,8 MB), ki vsebuje vse potrebne pakete. Po končani namestitvi bo vse skupaj zasedlo približno štirikrat več prostora in ne bo »zastokal« po morebitnih dodatnih datotekah. Namestitvena datoteka vsebuje programske datoteke AutoIt skupaj z dokumentacijo in primeri (zeloooo uporabni), prevajalnik Aut2Exe (prevaja skripte v izvršljive datoteke), AutoItX (DLL/COM, ki ga tokrat ne bomo obravnavali), in urejevalnik, ki je okrnjena različica programa SciTE script editor. Vključene so komponente za x86 in x64. Pri namestitvi izberimo polno namestitev skupaj s primeri, saj bodo temelj našega spoznavanja (in učenja).

Dodajanje gumbov je preprosto, besedilo se ne izbriše.

ZAČETEK PRI KONCU

Sistem bomo spoznavali drugače. Sintakse se ne bomo učili vnaprej, ampak si bomo ogledali že izdelane skripte. Najprej bomo spoznali naše glavno orodje. To je urejevalnik za skripte SciTE Script Editor, ki prepoznava AutoItovo sintakso, nas opozori na morebitne napake, omogoča zagon skriptov in še kaj. Načelno pa so AutoItove datoteke s končnico *.au3 besedočme datoteke in jih je zato možno pisati/urejati v poljubnem urejevalniku besedil (Beležnica Wordpad ...).

Z urejevalnikom SciTE odprimo datoteko msgbox.au3. Pri privzetih nastavitvah jo najdemo v imeniku C:\Program Files\AutoIt3\Examples.

; AutoIt Version: 3.0
; Language: English
; Platform: Win9x/NT
; Author: Jonathan Bennett (jon@hiddensoft.com)
;
; Script Function:
; Demo of using multiple lines in a message box
;

; Use the @CRLF macro to do a newline in a MsgBox - it is similar to the \n in v2.64
MsgBox(0, "AutoIt Example", "This is line 1" & @CRLF & "This is line 2" & @CRLF & "This is line 3")

Pritisk na tipko F5 ali izbira možnosti Tools –Go nam prikaže okno na sliki 1. Če primerjamo izpisano okno in skriptno datoteko, ugotovimo, da je vrstica označena s podpičjem (;) le komentar, ki pa nam da nekaj koristnih informacij. Ena od teh je uporaba makra @CRLF, ki pomeni skok v novo vrstico. Edini »ukaz«, ki smo ga uporabili za izris okna skupaj z naslovom in s sporočilom, je MsgBox. Poglejmo v pomoč (AutoIt Help File), kaj so parametri tega ukaza. Na kartici Index vnesemo v polje Search ukaz MsgBox. Pomoč nam pove, da ta ukaz izpiše okno s sporočilom in parametri, od katerih so nekateri izbirni:

MsgBox ( flag, "title", "text" [, timeout [, hwnd]] )

oziroma

MsgBox ( zastavica, "Naslov ki ga okno izpise", "besedilo" [, koliko časa bo besedilo izpisano [, hwnd]] )

Zaenkrat pustimo zastavico nespremenjeno (kot v zgledu) ob strani in poskusimo sami sestaviti lastno okno. V urejevalniku skript odprimo novo datoteko (Crtl-N) in vnesimo to vrstico:

MsgBox(0, "Primer 1", "mojMikro - Besedilo bo vidno 5 sekund", 5)

Če zdaj pritisnemo tipko F5, se ne bo zgodilo nič. Razlog je ta, da mora biti vsebina urejevalnika vedno shranjena v datoteko, šele potem lahko zahtevamo njeno izvajanje. Namesto ročnega vnosa bi lahko uporabili tudi zgled, ki je na koncu opisa ukaza (Example) z ročnim kopiranjem (metoda izreži-prilepi) oziroma s klikom gumba Open this script. Na dejstvo o izvajanju shranjene datoteke bodite pazljivi tudi takrat, ko preurejate primer iz zgleda za lastne primere. Pred izvajanjem, ga zato shranimo pod drugim imenom in šele nato zahtevamo njegovo izvajanje.

Vrnimo se na okno s razlago ukaza MsgBox. Pod tabelo zastavic lahko vidimo decimalne vrednosti in njihov pomen. V polje zastavice vpišemo vsoto vseh posameznih zastavic. Če želimo, da se nam izpišejo gumbi Yes, No in Cancel, nam tabela pove, da je to vrednost zastavice 3. V okno želimo dodati še znak ikono vprašaja (vrednost zastavice 32). Lahko bi še nadaljevali, a ostanimo pri tem. Skupna vrednost zastavice je tako vsota obeh navedenih, se pravi 35. Ker želimo, da se naše okno ne bo samodejno ugasnilo, uporabimo za časovni parameter timeout vrednost 0. Nova datoteka primer2.au3 bo videti takole:

MsgBox(35, "Primer 2", "mojMikro - Besedilo bo vidno ves cas ",0)

Njen rezultat je v skladu s pričakovanji.

Zagon in prevajanje skripta.

PREVOD SKRIPTNE DATOTEKE

Omenili smo že, da lahko v AutoItu narejene skripte tudi prevedemo v izvršljive datoteke. Našo datoteko primer2.au3 lahko prevedemo na več načinov. Prva možnost je prevod znotraj skriptnega urejevalnika SciTE. Izberemo možnost Tools–Compile ali pritisnemo kombinacijo tipk Ctrl in F7. V imeniku, kjer je skriptna datoteka, bo nastala prevedena datoteka z enakim imenom in končnico *.exe. Drug način prevajanja je, da v oknu, kjer imamo skriptne datoteke, kliknemo datoteko z desnim gumbom miške. Med možnostmi izberemo možnost Compile Script, rezultat pa bo enak kot prej. Tretja možnost je, da v AutoItovem meniju izberemo možnost Compile Script to .exe, ki nam zažene program Aut2exe. Ta nam ponuja več možnosti – uporabnik lahko sam določi, kje in pod kakšnim imenom bo datoteko shranil, kakšna bo stopnja uporabljenega stiskanja, programu lahko dodamo zaslonsko ikono in vrsto sistema, za katerega prevajamo. Aut2exe lahko uporabljamo tudi iz ukazne vrstice, ki načeloma podpira iste možnosti kot v okolju grafičnega vmesnika. Ne glede na način, s katerim boste izvedli prevajanje. je rezultat izvršljiva datoteka *.exe. Zato lahko rečem le: čestitke. naredili ste svoj prvi program z AutoItom (ali morda nasploh). Majhen korak za človeštvo, a morda velik za posameznika.

V programski pomoči najdemo opise in koristne primere skriptov in jih lahko predelamo.

KOT KOCKE LEGO

Oglejmo si še druge zglede. V urejevalniku odprimo datoteko notepad1.au3. Datoteko najprej poženimo, nato pa primerjajmo sript in rezultat. Zdaj že poznamo pomen zeleno označenega besedila (komentar je označen s podpičjem), prav tako že poznamo ukaz MsgBox in njegove parametre (zastavica je tokrat 4 – izpišeta se gumba Yes in No, v oknu ni nobenega znaka). Pri opisu funkcije MsgBox najdemo tudi tabelo z odzivnimi vrednostmi, povezanimi s pritiskom na možne tipke. Pritisk na tipko No nam da vrednost 7, pritisk na Ok pa vrednost 1. Funkcijo MsgBox smo uporabili za prikaz okna s sporočilom ter izris gumbov, hkrati pa smo njegov odziv uporabili za definiranje spremenljivke $answer. Vrstica, ki sledi, verjetno ne zasluži posebnega komentarja:

If $answer = 7 Then
MsgBox(0, "AutoIt", "OK. Bye!")
Exit
EndIf

Pomoč (AutoIt Help) potrdi, da gre za klasični stavek If...Then, katerega posledica je izvajanje vrstic, ki sledijo (pod pogojem, da je izpolnjen pogoj v if stavku). Če pritisnemo tipko 7 (klik na No), se bo izpisalo okno z naslovom AutoIt in sporočilom »OK. Bye!« Okno bo aktivno do preklica oziroma pritiska na tipko OK. Ukaz Exit ustavi delovanje skriptne datoteke.

V datoteki si oglejmo le še eno vrstico. Gre za vrstico z ukazom Run, ki nam zažene program zunaj AutoIta. Splošno obliko (spet AutoIt Help)

Run ( "filename" [, "workingdir" [, flag[, standard_i/o_flag]]] )

je mogoče uporabiti po svojih potrebah. Če želimo zagnati pomanjšano okno z ukazno vrstico v delovnem imeniku c:\, to storimo z vrstico:

Run("cmd.exe", "c:\", @SW_MINIMIZE)

Da okno namesto v opravilno vrstico pride na namizje, lahko ukaz nekoliko preuredimo v:

Run("cmd.exe", "c:\", @SW_MAXIMIZE)

Primer seštevanja poljubnih dveh števil

PRESENEČENI?

V okenskem okolju že znamo prikazati pogovorno okno s poljubnim sporočilom. Preveriti znamo odziv na klike gumbov in poklicati zunanji program. Poskusimo zdaj napisati skript, ki bo zahteval vnos dveh števil, izpisali se bosta števili, ki smo ju vnesli, na koncu pa se bo izpisala še vsota obeh števil. Če ste brez ideje, si pomagajte z zgledom datoteke inputbox.au3. Poglejte, kaj skript počne, in si oglejte vrstice, ki bi bile zanimive. Verjetno ste ugotovili, da bo za nas pomembna funkcija InputBox. Skok v datoteko AutoIt Help nam pove, kako lahko uporabimo InputBox. Skript lahko z dosedanjim znanjem napišemo v obliki:

$answer = MsgBox(0, "Primer sestevanja", "Skripta bo sestela dve stevili")
$prvo_stevilo = InputBox("Vnos prvega stevila", "Prosim vnesi prvo stevilo in pritisni OK")
$drugo_stevilo = InputBox("Vnos drugega stevila", "Prosim vnesi drugo stevilo in pritisni OK")
MsgBox(0, "Vneseni stevili", "Vnesli ste stevili" & ." " & $prvo_stevilo & " in " & " "& $drugo_stevilo)
$vsota=$prvo_stevilo+$drugo_stevilo
MsgBox(0, "Vsota ", "Vsota stevil je " & $vsota)

Kot ste verjetno opazili, smo uporabili znak &, s katerim smo sestavljali izraz znotraj »parametra« besedila. Učimo se dalje, zato odprimo skript calculator.au3. Namesto vnosov števil v kalkulator bomo skript predelali po svojih potrebah za samodejni vnos besedila v Beležnico. Novi skript je videti takole:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
AutoItSetOption("SendKeyDelay", 40)
Send("mojMikro "& @CRLF & "Dunajska 5" & @CRLF & "1000 Ljubljana")
Exit

Skoraj mimogrede smo spoznali WinWaitActive, ki čaka z izvajanjem skripta, dokler ni odprto okno z definiranim naslovom. Ukaz AutoItSetOption spremeni vrednost parametra SendKeyDelay. Z ukazom Send pa smo simulirali vnos besedila v urejevalnik.

AutoIt omogoča tudi povezovanje z drugimi aplikacijami, na primer izpis v Beležnico.

FUNKCIJE

Nekatere funkcije smo že spoznali. Seznam funkcij dobimo tako, da v AutoIt Help (kartica Index) vnesemo kot iskani kriterij Function Reference. Odpre se nam okno z vsemi podprtimi funkcijami, med katerimi najdemo nekatere, ki smo jih že uporabili. Za vsako od funkcij najdemo ime in kratek opis, do natančnejšega opisa skupaj s primerom uporabe pa pridemo s klikom imena funkcije.

Tokrat si ne bomo pomagali z zgledom, ampak bomo začeli pri opisu funkcije. Pripravili bomo dva skripta – prvi bo poskrbela za avtomatski priklop omrežnega diska, druga pa bo njeno nasprotje in ga bo odklopila. Za ta namen AutoIt že ponuja ustrezne funkcije. V prvemu skriptu bomo uporabili DriveMapAdd, v drugem pa DriveMapDel. V strežniku z IP-naslovom 192.168.200.1 imamo imenik z imenom Shared, ki je dan v uporabo različnim uporabnikom. Prijavili se bomo z uporabniškim imenom marko in geslom mojMikro, omrežni disk pa želimo priklopiti kot disk W: Skript priklop.au3 bo vseboval le eno vrstico:

DriveMapAdd("W:", "\\192.168.200.1\Shared", 0, "marko", "mojMikro")

Za lepši videz lahko dodamo še:

MsgBox(0, "Pogon W: je prikljucen na", DriveMapGet("W:"))

Če jo prevedemo (compile), dobimo izvršljivo datoteko (exe), ki jo lahko skopiramo na namizje ali omogočimo njen samodejni zagon ob zagonu sistema (Startup). Učinek bo še boljši, če datoteki prilepimo ustrezno ikono (npr. s sliko omrežnega diska). Podobno lahko pripravimo skript odklop.au3, ki je še preprostejši. Edini parameter, ki ga moramo vnesti, je logična oznaka priključenega pogona. V našem primeru bo to:

DriveMapDel("W:")

Z makrom do informacije o sistemu

IN ŠE MAKRI

Tudi nekatere makre smo že spoznali. Seznam podprtih makrov lahko vidimo tako, da v AutoIt Help (kartica Index) vnesemo kot iskani kriterij Macro Reference. Makro prepoznamo po znaku @. Oglejmo si še, kako bomo z makri ugotovili ime računalnika, arhitekturo procesorja, različico operacijskega sistema in trenutni IP-naslov računalnika. Skript, ki to omogoči, bo vseboval makre @ComputerName, @ProcessorArch, @OSVersion, @IPAddress1. Za izpis parametrov bo poskrbela funkcija MsgBox.

$ime=@ComputerName
$arh=@ProcessorArch
$os=@OSVersion
$ip=@IPAddress1
;vrstica, ki sledi je v eni vrsti !
MsgBox(0, "Sistemske informaicje", "Ime racunalnika " & $ime & @CRLF & "Aritektura " & $arh & @CRLF & "OS " & $os & @CRLF & "IP " & $ip, 0)
Exit

JE MIT UNIČEN ALI NE ?

Na to vprašanje si mora odgovoriti vsak uporabnik sam. Vsaj z mojega vidika vsekakor, saj lahko že z zgledi skriptov »zložimo« skupaj marsikaj uporabnega. V urici ali dveh se lahko uporabnik nauči toliko, da se potem lahko začne učiti sam. Zato vam svetujem, da si v celoti pregledate pogosto omenjeno datoteko AutoIt Help, ki je, kot smo lahko videli, zelo zelo uporabna. Dober pogled nad vsemi možnostmi lahko dobite tudi pod Language Reference. Takrat boste šele spoznali, da smo si ogledali le majhen del možnosti, ki jih AutoIt omogoča, ne dvomim pa, da se boste na nadaljevanju poti znašli sami. Verjamem, da se bo našel tudi kdo, ki bo le zamahnil z roko. A moj namen ni prepričevati. Vse uka željne sem le želel prepričati, da ni pravi način ta, da lačni dobi ribo, temveč to, da ga naučimo, kako lahko do nje pride sam.


ZANIMIVOSTI IN NASVETI

• AutoIt je brezplačen skriptni jezik, ki se lahko po potrebi povezuje tudi z drugimi aplikacijami. Zaradi podobnosti z basicom se ga je mogoče hitro naučiti in je preprost za uporabo. Usmerjen je predvsem v »avtomatizacijo« določenih procesov, kos pa bo tudi kakšni drugi nalogi.
• Skripte je mogoče preprosto prevesti tudi v samostojne aplikacije, ki za zagon ne potrebujejo posebnih dodatkov. V tem primeru za zagon izvršljive datoteke (*.exe) ni treba imeti nameščenega AutoIta. Pri shranjevanju skript bodimo pozorni na to, kdaj je vnos uporabniškega gesla ali uporabniškega imena nujen, saj bi lahko pri različnih orodjih (decompiler) prišlo do »kraje« morebitne informacije. Ta nevarnost je bila večja pri starejših različicah, aktualna različica pa ob prevajanju izvaja tudi stiskanje in šifriranje.
• Pred prevajanjem preverimo, ali skript nima napake v sintaksi. Prevajalnik morebitnih napak ne preverja, zato pred prevajanjem izvedemo ročni zagon skripta v okolju urejevalnika.
• Z branjem priloženih zgledov in dokumentacije lahko najdemo precej namigov. Bogat vir so tudi spletne strani. Seveda pa vas nihče ne sili, da morate poznati celoten AutoIt do temeljev. Ko boste določeno funkcionalnost potrebovali, se je boste pač naučili – če ne drugače, pa iz že obstoječih skriptov.

Moj mikro, Februar 2009 | Marko Koblar