Sintaxa AutoIt

download Sintaxa AutoIt

of 40

Transcript of Sintaxa AutoIt

X. Automatizarea testrii cu ajutorul macrourilorX.1. Elementele pachetului AutoIt 3 AutoIt este un limbaj de programare a macrourilor Windows cu o sintax motenit din familia limbajelor BASIC. Un macro este o succesiune de aciuni ale utilizatorului efectuate asupra interfeei grafice, de regul o combinaie de evenimente declanate cu ajutorul mouse-ului i tastaturii. Un limbaj de programare a macrourilor, precum AutoIt, ofer structuri motenite de la limbajele de programare cu ajutorul crora macrourile pot fi create la un nivel de rafinament i putere de prelucrare superioar celor oferite de instrumentele de nregistrare i redare a macrourilor (MRP1). Exemplele de MRP sunt numeroase att la nivel de sistem de operare, ct i la nivel de aplicaie. Instrumente MRP sunt incluse n pachetul Microsoft Office (macrourile Word, Excel, etc.) - limbajul care st la baza lor este VBA2. Mediul de programare Visual Fox ofer la rndul su un instrument MRP n cadrul aplicaiei Automated Test Harness, instalat n pachetul Visual Fox auxiliar. Diverse sisteme de operare permit crearea de scripturi cu rol de macrouri iar pentru Windows s-a consacrat limbajul AutoIt, al crui interpretor i documentaie sunt disponibile gratuit la adresa www.autoitscript.com. Macrourile3 sunt un tip particular de programe cu o algoritmic de complexitate redus i care nu pun accentul pe procesarea de date, ci pe simularea comportamentului utilizatorului n scopul reproducerii sale. Algoritmul unui macro pune accent pe structura secvenial din programarea clasic, mai precis pe secvenialitatea operaiilor declanate n GUI4 n diferite scopuri: poate fi vorba de nregistrarea unei secvene reutilizabile de operaii n cadrul unei aplicaii (vezi macrourile MS Office) sau de secvene de automatizare a unor procese de la nivelul sistemului de operare (executarea repetitiv a unor aplicaii, planificri de tip batch sau Task Scheduling, testarea automatizat a produselor software). Desigur, aspectul care justific necesitatea macrourilor este repetabilitatea unui set de operaii, aadar reproducerea comportamentului utilizatorului denumit n mod generic automatizare GUI5. Dei n mod tradiional macrourile sunt secvene de operaii, limbaje precum AutoIt permit programarea macrourilor la un nivel avansat, cu structuri de programare, variabile i mecanisme de dialog cu utilizatorul, oferind chiar i acces la regitrii Windows sau la obiecte COM. Operaiile de baz pe care le simuleaz AutoIt sunt apsarea tastelor, folosirea mouse-ului i manipularea ferestrelor Windows. Iniial, limbajul a fost conceput pentru automatizarea instalrilor i configurrilor software de ctre administratorii de sistem care trebuie s instaleze n mod identic sute de PC-uri. Versiunea 3 a limbajului propune o sintax inspirat din limbajele BASIC (VBScript n special), suport expresii complexe, funcii ale utilizatorului i structuri de programare tradiionale. Rezumm n continuare elementele de noutate ale versiunii 3:Macro recording and playback tools Visual Basic for Applications 3 Unii autori, inclusiv documentaia AutoIt, folosete termenii macro i script ca sinonime. Dup ali autori, macroul este un tip particular de script orientat pe operaii GUI iar scripturile sunt programe interpretate ce automatizeaz diverse operaii (nu doar GUI), fiind mai apropiate de programarea tradiional. n materialul de fa cei doi termeni se vor utiliza cu sensurile lor difereniate. 4 Graphic user interface interfaa grafic a utilizatorului 5 GUI automation2 1

Macrourile AutoIt 3 pot fi executate prin interpretare sau compilate prin instrumentul Aut2Exe; S-a creat o versiune ActiveX + DLL numit AutoItX care permite integrarea AutoIt n alte limbaje de programare; Macrourile AutoIt 3 sunt stocate n fiiere de tip au3; Macrourile pot extrage date din obiecte GUI tradiionale: casete de editare, check box, liste, butoane, etc. i chiar obiecte GUI din alte ferestre dect cea activ; Macrourile pot folosi structuri IF, CASE, WHILE, FOR, funcii ale utilizatorului i expresii complexe, pste 25 de funcii de manipulare a irurilor de caractere i date de tip numeric; Macrourile pot accesa ferestre Windows prin titlul ferestrei sau prin clas.

Structura de directoare creat la instalarea pachetului AutoIt complet conine elementele: AutoIt3.exe interpretorul propriu-zis, nu are o interfa grafic proprie ci poate fi lansat din linia de comand sau prin dublu-clic (care va solicita deschiderea unui macro au3) AutoIt3A.exe versiunea AutoIt pentru Windows 98 AU3Info.exe AutoIt Window Info Tool (AWIT), instrument capabil s extrag informaii de la fereastra activ titlul, coninutul barei de stare, poziia, dimensiunea, poziia cursorului, culoarea pixelului de la poziia cursorului, date privind obiectul GUI de la poziia cursorului. Fereastra AU3Info este deschis n regim Always on Top i ofer informaiile respective n timp real, simultan cu manevrarea mouse-ului n fereastra vizat. Informaiile afiate de AWIT pot fi apoi folosite n cadrul macrourilor, fiind copiate n Clipboard prin dublu clic pe elementul dorit. Evident, copierea prin dublu clic nu va fi posibil simultan cu micarea mouseului n fereastra vizat (datele legate de poziia cursorului se modific n timp real), de aceea instrumentul AWIT ofer o opiune Freeze (Ctrl-Alt-F), pentru nghearea temporar a informaiilor AWIT AU3InfoA.exe versiunea AWIT pentru Windows 98 AU3Check.exe corectorul sintactic AutoIt.chm documentaia Help Psapi.dll DLL necesar funciilor sub Windows NT 4 Uninstall.exe programul de dezinstalare AutoIt v3 Website.url shortcut spre site-ul AutoIt Directorul Aut2Exe: o Directorul Icons cu pictogramele ce pot fi asociate extensiei au3 o Aut2Exe compilatorul pentru convertirea macrourilor n executabile o Aut2ExeA.exe versiunea Windows 98 a compilatorului o AutoItSC.bin stub executabil pentru macrourile compilate o UPX.exe comprim macrourile compilate Directorul Examples o Directorul GUI exemple de macrouri GUI o Helpfile exemple de macrouri folosite n exemplele din Help

Fig. 1. Instrumentul AWIT, pagina de afiare a informaiilor privind poziia cursorului 6

Directorul Extras o Directorul AutoUpdateIt conine un script de actualizare automat a versiunii de AutoIt o Directorul Editors conine definiiile schemelor de colorare a sintaxei pentru editoare de text populare o Directorul Exe2Aut conine decompillatorul de macrouri, pentru obinerea codului surs din macrouri executabile

6

Dei cursorul nu e vizibil n captur, poziia sa este butonul Center din Word (indicat de eticheta Center)

o Directorul SQLite conine un executabil i un help pentru lansarea prin linia de comand o Directorul V2_to_v3_Converter conine convertorul de macrouri de la versiunea anterioar la versiunea 3 Directorul Icons conine pictograme pentru extensia au3 Directorul Include conine biblioteca de funcii predefinite ale utilizatorului Directorul AutoItX conine versiunea DLL a interpretorului ce ofer o interfa ActiveX/COM+DLL Directorul SciTE conine o versiune simplificat a editorului de macrouri SciTE. Versiunea complet a editorului poate fi descrcat gratuit de pe site-ul AutoIt i instalat peste versiunea implicit din pachetul AutoIt. Dei macrourile pot fi editate cu orice editor de texte, SciTE ofer faciliti de colorare a sintaxei i detectare a erorilor sintactice.

X.2. Editorul SciTE Editorul de macrouri SciTE este la baz un editor de texte rezultat din proiectul open source SCIntilla, optimizat pentru editarea de cod surs indiferent de limbaj (C++, PHP, Python etc.). Aceasta implic suport pentru stilizarea codului surs, urmrirea liniilor de cod, indicatori de eroare i sugestii de editare. Opiunile de stilizare se refer la formatarea personalizat a componentelor codului surs. Instrumentele oferite de versiunea complet a SciTE (numit SciTe4AutoIt, neinclus n pachetul AutoIt dar disponibil gratuit la aceeai adres), sunt: Formatare implicit a codului AutoIt, inclusiv cu indentare automat; Sistem Help contextual (activat prin F1 la selectarea unei linii de cod); Tabel de funcii pentru acces rapid la sintax i help (Shift-F1); AutoComplete, instrument de sugerare n timpul editrii codului surs, pentru tastarea de instruciuni dar i pentru numele funciilor sau variabilelor; Intellisense, instrument de sugerare a parametrilor funciilor; AU3Spy, instrument ce detecteaz nume i valori ale obiectelor GUI; CodeWizard, Koda i GUIBuilder instrumente de asisten n crearea dialogurilor cu utilizatorul i a formularelor; Tidy, instrument precompilator cu rol de asigurare a lizibilitii codului surs: indentarea instruciunilor, convertirea cuvintelor cheie n majuscule, ncrcarea funciilor utilizatorului (din Userfunctions.txt) n tabelul editorului, formatarea numelor de variabile, eliminarea spaiilor redundante, generarea de comentarii care s indice numele funciei la fiecare final de funcie AutoIt (Endfunc), generarea unei documentaii cu logica programului i rapoarte privind variabilele, detectarea unor erori de sintax, sortarea blocurilor Func-Endfunc (definiiile funciilor). Fiierul Tidy.ini permite activarea sau dezactivarea individual a acestor funcionaliti Tidy. Obfuscator, instrument precompilator cu rol de optimizare a unor elemente din codul surs, creeaz un nou macro din codul surs iniial cu modificri precum: redenumirea variabilelor i funciilor, conversia unor valori literale de tip string n variabile, conversia valorilor literale numerice n apeluri ale funciei Number, conversia referinelor la alte macrouri n apeluri ale funciei Execute(), generarea de avertismente legate de o serie de funcii a cror utilizare nu e recomandat, generarea unui jurnal cu modificrile aduse. AU3Check (SyntaxChecker) este corectorul sintactic, precompilator.

AU3Recorder (Scriptwriter) i AutoIt Macro Generator sunt dou instrumente MPR asociate mediului AutoIt, capabil s nregistreze activitatea mouse-ului i tastaturii i s genereze un macro AutoIt. Instrumentele sunt produse auxiliare create de autori diferii i sunt frecvent folosite pentru a construi mai rapid acele pri din macrouri complexe care nu necesit rafinare prin programare. AutoIt3Wrapper este o aplicaie care integreaz interpretorul i compilatorul AutoIt ntr-o interfa grafic ce ofer opiuni de precompilare i postcompilare, cum ar fi activarea sau dezactivarea instrumentelor precompilatoare (Tidy, Obfuscator, AU3Check - acestea pot fi rulate i ca executabile independente ce primesc un macro la intrare). Printre altele aplicaia indic parametrii cu care pot fi executate instrumentele de precompilare, citete sau modific directive implicite din fiiere .ini, execut diverse programe la precompilare sau postcompilare (Run Before/After), ofer posibilitatea de ntrerupere i reluare a compilrii n funcie de erorile detectate. Practic, aplicaia AU3Wrapper permite utilizatorului s perceap editorul SciTE ca un mediu de programare i generare a proiectelor AutoIt ce ofer acces n mod interactiv la toate instrumentele AutoIt i la numeroase instrumente auxiliare create de comunitatea care suport acest limbaj. Snippet holder, un instrument de snippet management7 Scripturi LUA LUA este un metalimbaj de programare multi-paradigm (neconstrns de tipul de problem abordat) creat ca extensie pentru programarea procedural i obiectual. LUA se aseamn cu LISP i XML prin aceea c e un limbaj minimalist i generic care folosete o singur structur de date, metatabelul, pentru a implementa majoritatea structurilor tradiionale (clase, obiecte, spaii de nume, liste, arbori). LUA se aseamn cu JavaScript prin aceea c e un limbaj interpretat care nu i propune s construiasc programe de sine stttoare, ci funcii-script care s fie incluse i executate (prin API8) n programe gazd (de regul programe C, Java i .NET, frecvent n domeniul jocurilor PC). Mediul AutoIt poate folosi o serie de funcii LUA predefinite pentru eficientizarea procesului de editare prin SciTE9. Exemple frecvente de apelare a funciilor LUA sunt generarea sau eliminarea de comentarii la casetele de dialog, copierea liniilor de cod marcate anterior ca semne de carte, activarea unor mesaje de consol pentru depanare etc. grupate n a doua jumtate a meniului Tools din SciTE10. SciTE Config permite configurarea schemei de colorare a sintaxei i personalizarea mediului de lucru. Configurrile specifice variatelor limbaje pentru care SciTE poate fi folosit ca editor de cod optimizat se realizeaz n lista fiierelor de configurare accesibile n meniul Options. Se poate remarca astfel versatilitatea SciTE, care poate deservi limbaje ca HTML, SQL, C, PASCAL, PYTHON i multe altele. n materialul de fa au relevan doar configurrile privind AutoIt.

Termenul snippet va fi utilizat n cele ce urmeaz ca o denumire scurt pentru poriuni reutiolizabile de cod surs, o funcionalitate inclus de multe editoare de cod surs moderne. 8 Interfee de programare 9 Similar cu modul n care instrumente WYSIWYG precum Dreamweaver permit generarea de funcii JavaScript reutilizabile n pagini HTML (Behaviors, Actions) 10 Manualul oficial al limbajului LUA este accesibil la http://www.lua.org/manual/5.0/

7

Resource Hacker, un program ce ofer acces la diverse resurse11 din executabile Windows (pictograme, forme ale cursorului, sunete, casete de dialog, fonturi, meniuri). Poate fi utilizat ca instrument precompilator pentru adugare, modificare sau tergere de resurse n cadrul AutoIt3Wrapper dar nu e instalat implicit, fiind un produs third party disponibil la adresa http://angusj.com/resourcehacker/.

O parte din aceste instrumente sunt implicit active, majoritatea sunt disponibile n meniul Tools iar instrumentele precompilatoare pot fi gestionate i cu ajutorul AutoIt3Wrapper, care se execut implicit prin opiunea Tools - Compile. n plus, unele instrumente apar n dou variante, Prod i Beta. Prod corespunde versiunii AutoIt curente stabile (versiunea 3 la momentul scrierii acestui material) iar Beta corespunde versiunii AutoIt curente beta. Elementele ce pot rula difereniat dup cele dou versiuni sunt corectorul sintactic, helpul, compilatorul, lista funciilor, Tidy. Instrumentul Switch Definitions12 permite selectarea versiunii implicite la care s se raporteze aceste instrumente, precum i actualizarea definiiilor acestor versiuni conform siteului oficial. n cele ce urmeaz materialul este dedicat versiunii Prod curente (3.2.8) Operaii de baz n SciTE Deschiderea unui macro AutoIt se poate realiza la dublu clic pe un fier de tip .au3. Rularea sa (cu corectare sintactic implicit) se poate realiza tot prin dublu clic 13 sau cu ajutorul lui F5 sau Tools-Go (pentru versiunea Prod). Crearea unui macro AutoIt se poate realiza n Windows Explorer din meniul contextual (lista New va fi actualizat cu tipul de fiiere AutoIt la instalarea pachetului) sau cu opiunea FileNew. Compilarea n executabil a unui macro se realizeaz prin F7 sau Tools-Compile. Corectarea sintactic fr rulare se realizeaz cu Ctrl-F5 sau Tools-Syntax Check Prod.

Aici termenul e folosit cu sensul de resurs Windows componente nglobate la compilare n executabil dar la care Windows ofer acces pentru reutilizare i personalizare facil. 12 Poate fi lansat cu shortcutul aferent din meniul Windows sau cu executabilul AutoIt/SciTE/defs/Updatedefs.exe 13 La instalarea pachetului AutoIt, precum i n SciTE Config se poate stabili dac dublu clic pe fiierele au3 va avea ca efect deschiderea macroului n SciTE sau executarea sa.

11

Fig. 2. Semnalarea erorilor de ctre corectorul sintactic SciTE []

Mediul de lucru i editarea n SciTE sunt afectate de o serie de instrumente ale editorului: SciTE poate gzdui (edita, executa, interpreta i compila) coduri surs scrise ntr-o multitudine de limbaje de programare. Selecia limbajului curent (i a regulilor aferente) se realizeaz prin meniul Languages. Recunoaterea limbajului se realizeaz pe baza extensiei fiierelor n lucru, definite n fiierele de configurare accesibile prin meniul Options. Executarea compilatoarelor i interpretoarelor aferente se face automat (pe baza sistemului linie de comand), dac acestea au fost n prealabil instalate14; Instrumentele de sugestie ofer pentru selecie n timpul editrii lista cuvintelor cheie, a numelor de funcii sau ordinea parametrilor unei funcii; Sintaxa e evideniat prin colorarea elementelor codului surs dup o schem de culori selectat prin SciTE Config; SciTE permite restrngerea sau extinderea structurilor imbricate (If-EndIf, Do-Until, While-Wend, #region-#endregion, blocuri de comentarii) pentru condensarea codului surs i derularea sa facil; SciTE ofer un mecanism Find-Replace avansat, comparabil cu cel din Word; Instrumentul Ouput, n partea de jos a ferestrei, indic n timpul executrii unui macro (sau program n limbajele gzduite de SciTE) care sunt ieirile, care sunt fazele execuiei sau compilrii i chiar mesajele de eroare ale compilatorului de la baz. Zona Output poate fi resetat cu Tools-Clear Output;

14

Motiv pentru care se recomand instalarea pachetului AutoIt nainte de versiunea complet SciTE

Meniul Tools ofer o serie de opiuni pentru ntreruperea execuiei (Stop Executing), precum i pentru navigarea mesajelor de eroare (Next Message, Previous Message); SciTE i execut instrumentele (inclusiv compilatorul sau interpretorul pe care l gzduiete) prin comenzi adresate n linia de comand. Compilatorul sau interpretorul care trebuie solicitat e recunoscut conform extensiilor fiierelor (declarate n fiierele de configurare specifice limbajelor gzduite din meniul Options). Fiind vorba de execuie n linie de comand macroul (programul) rulat nu va fi deschis ntr-o fereastr proprie. Pentru a modifica acest mod de execuie implicit, variabila command.go.subsystem poate primi valorile: o 0, rulare n linia de comand, o 1, programe ce i vor crea propria fereastr, o 2, rulare prin shell (Windows Explorer), deci similar cu executarea prin dublu clic n interfaa sistemului de operare (recomandat pentru pagini HTML care nu i creeaz propria fereastr), o 3, rularea unei extensii, o 4, rularea prin sistemul HTMLHelp din Windows, o 5, rularea prin funcia WinHelp. Aceste valori pot fi atribuite n oricare din fiierele cu extensia .properties i care fixeaz condiii implicite ale mediului de lucru (inclusiv variabile de mediu) la diferite nivele: o difereniat n fiierele de configurare a limbajelor din meniul Options (html.properties, cpp.properties, au3.properties etc.) o n Options-Open Global Options File (configurare iniializat global), o n Options-Open User Options File (configurare specific unui utilizator, o supradefinete pe cea global), o n Options-Open Directory Options File (configurare local aplicabil pentru fiierele din directorul n care e salvat SciTEDirectory.properties i subdirectoarele sale, o supradefinete pe cea a utilizatorului), o n Options-Open Local Options File (configurare local aplicabil pentru fiierele din directorul n care s-a salvat fiierul SciTE.properties, supradefinete celelalte configurri) Fiierul global de configurare, SciTEGlobal.properties, poate conine o directiv de anulare a configurrilor locale (ex: properties.directory.enable cu valori booleene). Se observ c toate aceste fiiere sunt de tip text i conin perechi nume=valoare pentru variabilele de mediu15. Configurrile specifice platformei Windows sunt definite prin directiva condiional IF PLAT_WIN .... SciTE permite exportarea codului surs n format PDF, Latex, XML, HTML, RTF; SciTE poate ntreine 100 de buffere simultan n memoria intern, fiecare cu propriul fiier. Lista lor e accesibil n meniul Buffers, trecerea de la unul la altul realizndu-se prin sistemul consacrat al Tab-urilor. Totalitatea bufferelor active (cu fiierele deschise) la un moment dat alctuiesc o sesiune. Sesiunea poate fi salvat i rencrcat, ceea ce permite deschiderea simultan a mai multor fiiere (File-Load Session i File-Save Session);15

Lista variabilelor de configurare poate fi consultat la adresa http://scintilla.sourceforge.net/SciTEDoc.html, rubricile Defined variables in properties files i File properties. Materialul de fa va presupune c se lucreaz pe configurrile globale implicite, n caz contrar se va specifica acest lucru.

Editarea n SciTE poate folosi abrevieri pentru mrirea vitezei de construire a codului surs. Structuri complexe pot fi abreviate similar cu mecanismul AutoCorrect din Word, pe baza unei tabele cu perechi abreviere=expandare. Fiierul cu definirea acestor perechi e abbrev.properties i poate fi deschis pentru editare cu Options-Open Abbreviations File. Sunt uzuale situaiile n care o abreviere de 2-3 caractere e folosit pentru a genera o structur de programare, o definie de funcie sau un obiect GUI. Abrevierile nu pot conine semnul =. Expandrile pot conine caracterul de salt la rnd nou "\n" i caracterul de inserie "|" care indic zone din codul surs generat n care trebuie realizate completri (ex: abrevierea fornext va genera o structur FOR cu contorul i, pasul 1 i un punct de inserie acolo unde urmeaz s se completeze blocul repetitiv dde instruciuni din cadrul structurii FOR.). Recomandm consultarea abrevierilor predefinite i crearea de noi abrevieri pentru poriuni de cod surs frecvent reutilizate.

X.3. AutoIt - Elemente de limbaj AutoIt folosete o sintax de tip BASIC, care implementeaz conceptele de baz ale limbajelor de programare structurat slab tipizate i slab obiectualizate: Tip de date unic i variant (o dat i poate schimba tipul prin conversii implicite provocate de operatori); Variabile i constante; Macrovariabile (variabile de mediu, macrouri predefinite, caractere speciale); Operatori numerici, string, logici; Structuri de programare (condiionale, repetitive) i forarea ieirilor din structurile de programare; Comentarii; Directive; Funcii: o Funcii predefinite (incluse n pachet i recunoscute de interpretorul AutoIt), o Funcii ale utilizatorilor (create de programatorii AutoIt i salvate n cadrul macrourilor), o Funcii predefinite ale utilizatorilor (create de diveri utilizatori, dar ataate pachetului AutoIt sub forma bibliotecilor de funcii din directorul Include; sunt recunoscute de interpretor cu condiia s se includ n macro biblioteca aferent); o Funcia Opt, are rolul de a configura funcionarea interpretorului. Fiecare instruciune se tasteaz pe cte un rnd. E posibil ca o linie de cod s fie prelungit pe mai multe rnduri, dac linia ntrerupt se finalizeaz cu perechea de caractere " _" (spaiu urmat de underscore). O linie de cod surs poate fi ntrerupt n orice punct, cu excepia coninutului irurilor de caractere. Aadar, nu e posibil construcia: MsgBox (0, "titlu", "acesta este & _ un ir de caractere ntrerupt") n schimb, se va folosi o concatenare pentru a face posibil ntreruperea: MsgBox (0, "titlu", "acesta este" & _ "un ir de caractere ntrerupt")

X.3.1. Tipizarea datelor AutoIt AutoIt face parte din rndul limbajelor slab tipizate. Teoretic, limbajul ofer un singur tip de date, numit variant. Practic, o dat variant poate conine o valoare numeric (zecimal sau hexazecimal), boolean, un ir de caractere (string) sau un cod hexazecimal. Comportamentul datelor de tip variant e contextual difer n funcie de valoarea datei i de modul n care folosit. Exemple: Expresia 2*2 va fi considerat numeric, cu rezultatul 4, deoarece operaia * este disponibil doar pentru valori numerice. Expresia 2*"2" va fi considerat numeric, cu rezultatul 4, deoarece limbajele netipizate ofer un mecanism de conversie implicit la tipul sugerat de operator. Expresia "2"*"2" va fi considerat numeric, cu rezultatul 4, datorit aceluiai mecanism de conversie implicit la tipul sugerat de operatorul * Expresiile 2&2, "2"&"2" vor fi considerate expresii de tip text, datorit conversiei implicite provocate de operatorul de concatenare. Expresia True+100 va avea valoarea 101, datorit conversiei implicite de la boolean la numeric (True=1).

Denumirea tipului variant sugereaz faptul c o aceeai dat i poate schimba tipul fr conversii explicite. Practic, putem afirma c limbajul lucreaz cu patru tipuri de date numeric, string, boolean i hexazecimal, dar c tipul acestora este stabilit pe baza operatorilor din expresiilor n care sunt antrenate. Conversia implicit nu provoac niciodat erori dac irul nu poate fi interpretat numeric, rezultatul conversiei va fi 0, ca n exemplul expresiei 2*"a"=2*0=0. Valorile booleene sunt True i False (False are alternativele 0 numeric- i "" - string). n cele ce urmeaz se va utiliza frecvent exprimearea consacrat valoare literal16. Aceasta semnific o valoare care e tastat explicit n codul surs i nu provinde de la o variabil, rezultatul unei expresii sau al unei funcii. Exemplu: 2 + $a e o expresie care adun o valoare literal (2) cu valoarea unei variabile ($a). Datele numerice pot fi folosite n urmtoarele variante de valori literale: n format zecimal (ntregi pozitivi, negativi sau numere cu virgul zecimal); n format exponenial (2e3 reprezint 2*103 = 2000); n format hexazecimal. Datele de tip text (string) pot fi folosite: n format delimitat cu ghilimele (ghilimelele coninute n valoarea datei se dubleaz); n format delimitat cu apostroafe (dac data conine apostrof, acesta se dubleaz); n format sensibil la construciile speciale.

16

n original literal value, a nu se confunda cu valorile de tip caracter (string)

Cei doi delimitatori pot fi utilizai alternativ pentru a elimina necesitatea dublrii (ghilimele la delimitare i apostroafe n valoarea datei sau invers), ca n exemplul: "Ion a spus 'Salut' si a plecat" (alternativ la "Ion a spus ""Salut"" si a plecat") n mod normal, valorile de tip text sunt tratate literal (ca un ir de caractere tastate direct n codul surs). Exist posibilitatea de a modifica modul de tratare a lor, pentru a putea detecta i substitui construcii speciale care apar n cadrul irurilor de caractere, cu ajutorul funciei Opt(). Spre exemplu, presupunem c variabila $a are valoarea 2. O valoare de tip text "a$a$" va fi tratat n mod normal ca un ir coninnd cele patru caractere dintre ghilimele; Funcia Opt ("ExpandVarStrings", 1) va activa substituirea construciilor speciale, iar valoarea datei va deveni "a2", prin nlocuirea construciei speciale $a$ cu valoarea variabilei $a. Dac s-a activat substituirea variabilelor n iruri de caractere i totui se dorete utilizarea semnului $ ca un caracter oarecare (fr a provoca o substituire), prima apariie a sa n construcia special trebuie dublat: "a$$a$". Construciile speciale care pot fi substituite cu ajutorul funciei Opt sunt variabilele obinuite (delimitate n text cu $), variabilele de mediu (delimitate n text cu %...%) i macrovariabilele (delimitate n text cu @). Exemple: $a=2 Opt ("ExpandVarStrings", 1) S-a atribuit valoarea numeric 2 variabilei a i s-a activat substituirea de variabile n iruri de caractere. Expresia "a$a" & "$a$" va avea valoarea "a$a2". Se poate concluziona c substituirea a avut loc naintea concatenrii. Aadar, expresia a fost mai nti convertit la "a$a" & "2" (primul caracter $ nu a provocat o substituire deoarece nu are un caracter pereche). Expresia "a$a$a$" va avea valoarea "a2a$". Expresia "a$$a$$a$$" va avea valoarea "a$a$a$". Se poate concluziona c substituirea are loc de la stnga spre dreapta: o substituirea primei construcii "$$a$" e dezactivat prin dublarea semnului de la poziia 2, deci se obine n prima faz "a$a$$a$$" o mergnd spre dreapta, apare o a doua construcie $$a$ (poriunea ngroat, aflat acum la poziia 4), deci se obine rezultatul "a$a$a$$" o n final, ultima pereche de $ (acum la poziia 6) e redus la un singur $. Expresia "a$$a$a$" va avea valoarea "a$a2". Din nou, are loc aceeai substituire de la stnga la dreapta: o prima substituire (poziia 2) e dezactivat, deci se obine n prima faz "a$a$a$" o mergnd spre dreapta, apare o a doua construcie $a$ care va fi substituit (poriunea ngroat, acum la poziia 4), deci se obine rezultatul "a$a2".

Substituirile nu au loc, dac valoarea variabilei nu a fost anterior definit (prin iniializare, diverse atribuiri etc.)! Dezactivarea senzitivitii la construcii speciale se realizeaz prin apelul Opt ("ExpandVarStrings", 0) Este evident faptul c senzitivitatea la construcii speciale este o alternativ eficient la concatenarea valorilor de variabile. Spre exemplu, urmtoarele dou expresii au aceeai valoare: "a$a$" cu senzitivitatea la construcii speciale activat; "a" & $a, indiferent dac senzitivitatea a fost activat sau nu. Datele booleene pot avea valorile True i False. La conversia implicit string boolean, irul vid devine False, orice alt ir devine True (inclusiv irul "False" sau irul "0"!) La conversia implicit boolean string, cele dou valori booleene devin "False" i "True" La conversia implicit numeric boolean, 0 devine False, orice alt numr devine True La conversia implicit boolean numeric, False devine 0, True devine 1 Exemple: Expresia "False" AND True va avea valoarea True Expresia "" AND True va avea valoarea False Expresia 1 OR "" va avea valoarea True Expresia 1+True va avea valoarea 2 Expresia 1+"True" va avea valoarea 1 (conversie euat la al doilea operand) Expresia True & True va avea valoarea "TrueTrue" Datele hexazecimale se mpart n categoriile: numere hexazecimale, obinute prin conversia unor date numerice ntregi n baza de numeraie 16; coduri hexazecimale, exemple: conversia unor caractere n coduri numerice, convertite apoi n baza de numeraie 16 (coduri ASCII sau Unicode), codurile de culoare pe 3 octei. Datele hexazecimale sunt marcate la stnga de combinaia 0x, urmat de valoare. Numerele hexazecimale sunt limitate la 4 octei (4 perechi de cifre hexazecimale), codurile hexazecimale pot depi aceast limit. Toi operanzii hexazecimali sunt considerai numere hexazecimale. Codurile hexazecimale apar doar n funciile de conversie. Exemplu: 0xFF+1 ...primul operand va fi considerat un numr hexazecimal (e valoare literal); Binary("abc")+1 ...primul operand va fi considerat un cod hexazecimal. Un numr hexazecimal se obine prin conversia unui numr zecimal n baza 16. Un cod hexazecimal se obine prin diverse metode de codificare, pornind de la ideea c orice cod este reprezentat pe un numr ntreg de octei. Un octet stocheaz dou cifre hexazecimale.

Aadar, numrul zecimal 15, n hexazecimal F, se reprezint ca 0x0F (1 octet, o pereche de cifre). Orice cod hexazecimal este reprezentat pe un ir de octei. Metodele de obinere a codurilor hexazecimale implic dou concepte de baz: codurile de caractere; ordinea octeilor. Codurile de caractere stau la baza codificrii hexazecimale a irurilor de caractere. Variantele cele mai ntlnite sunt: ASCII setul de 256 caractere de baz, cu 1 octet pe caracter; Unicode setul extins cu 1-4 octei pe un caracter, care are o serie de versiuni: o UTF-8, conceput pentru a fi compatibil cu ASCII: caracterele din setul de baz folosesc 1 octet i codurile lor coincid cu cele ASCII, caracterele cu diacritice folosesc 2 octei, n plus mai exist o serie de caractere cu utilizare rar ce ocup 3 sau 4 octei; o UTF-16, incompatibil cu ASCII: caracterele occidentale uzuale, inclusiv cu diacritice, se stocheaz pe 2 octei, dar exist i coduri de 3 sau 4 octei. Nu doar irurile de caractere pot fi codificate hexazecimal. Un alt exemplu de cod hexazecimal sunt codurile de culoare. AutoIt lucreaz cu codul RGB pe 3 octei, care rezerv cte un octet pentru intensitatea culorilor R (rou), G (verde) i B (albastru). Din cele 3 culori, fiecare cu intensiti variabile de la 0 (00) la 255 (FF), se pot obine toate celelalte culori. Spre exemplu: culoarea rou e codificat 0xFF0000, deci R la intensitate maxim, G i B la minim; culoarea alb e codificat 0xFFFFFF, cu toate culorile la intensitate maxim; culoarea neagr e codificat 0x000000, cu toate culorile la intensitate minim; nuanele de gri au coduri n care cele trei culori au intensitate egal: 0x111111 (mai aproape de negru), 0xA2A2A2 (mai aproape de alb). Un alt exemplu de coduri hexazecimale sunt identificatorii ferestrelor i obiectelor dintr-o interfa grafic (vezi capitolul dedicat programrii GUI). Ordinea octeilor poate varia dup dou ordini consacrate de stocare a datelor complexe: littleendian (LE) i big-endian (BE). n sistemul de memorare little-endian (LE), gradul de semnificaie a componentelor informaiei crete spre dreapta. n sistemul de memorare big-endian (BE), gradul de semnificaie a componentelor informaiei descrete spre dreapta (se citete mai nti cea mai semnificativ informaie). Exemple: Utilizri Date calendaristice: Adrese potale: Nume persoane: Valoarea 0x052346: Little - end 12-August-2007 Nr.X, Strada X, Orasul X, Judetul X Prenume, Nume 0x462305 Big end 2007-August-12 Judetul X, Orasul X, Strada X, Nr.X Nume, Prenume 0x052346

Ordinile LE i BE sunt folosite, dup cum se vede din tabel, n numeroase contexte. Sistemul de numeraie arab folosete o ordine BE: n numrul 653, 6 este cifra cea mai semnificativ (numrul de sute), iar gradul de semnificaie descrete spre dreapta. Sistemul de numeraie roman este unul mixt: n numrul XV (15), ordinea este BE, n numrul IX (9), ordinea cifrelor

este LE. Dup cum se vede n ultimul rnd al tabelului, ordinea de reprezentare a octeilor unei valori hexazecimale poate la rndul su s difere. De regul diferena este dat de modelul de procesor (Intel i AMD sunt procesoare implicit LE) dar metoda de codificare hexazecimal poate fi controlat i de funcii AutoIt specifice: exist posibilitatea de a obine coduri ASCII, UTF-8, UTF-16 LE, UTF-16 BE sau coduri LE obinute din numere hexazecimale. Pentru numerele hexazecimale se folosete ordinea intuitiv (pentru un cititor occidental, obinuit s citeasc de la stnga la dreapta), deci BE. Aadar, numrul 4096 se va scrie n hexazecimal 0x1000 (BE) i nu 0x0010 (LE). n schimb, din numrul 4096 se poate obine un cod hexazecimal prin diferite metode ordonare LE, ordonare BE, tratarea cifrelor ca i caractere ASCII sau Unicode, etc. Mai multe detalii se vor prezenta n subcapitolul rezervat funciilor de codificare hexazecimal. Limita de 4 octei e impus doar asupra numerelor hexazecimale i la folosirea anumitor operaii binare (ex: BitAND). Spre exemplu, o atribuire precum $a=0x0123456789 ...va provoca o eroare datorit depirii limitei (folosete 5 octei). n schimb, limita nu mai e valabil n cazul codurilor hexazecimale obinute printr-o conversie (funcia Binary()): $a=Binary("xyzxyzxyzxyz") ...valoarea variabilei va depi cu siguran cei 4 octei, fr s provoace o eroare (dar nu va putea fi folosit n operaii binare limitate la 4 octei). Concluzionm cu regulile de conversie implicit: La string se poate converti orice alt tip o Prin adugarea de ghilimele (numere zecimale, valori booleene, coduri hexazecimale) o Prin conversie la numeric zecimal urmat de adugare de ghilimele (numere exponeniale i hexazecimale) La numeric: o Valorile care nu pot fi intrepretate numeric sunt convertite la 0. n aceast categorie intr irurile de caractere neconvertibile (inclusiv "True") i codurile hexazecimale (returnate de funcii); o Se convertesc direct iruri de caractere interpretabile numeric: n format zecimal, hexazecimal BE sau exponenial (ex: "-12","0x0F", "1.0e+3", etc.) numerele n format exponenial se convertesc doar dac exponentul are semn iar mantisa are mcar o zecimal deci conversiile irurilor "1e3" sau "1.e-3" vor eua (rezultat 0), dar "1.0e-3" va avea succes (rezultat 0.001). o Valorile booleene se convertesc la 1 (True), respectiv 0 (False). La boolean se poate converti orice tip o "" i 0 se convertesc la False

o Orice alt numr sau ir de caractere se convertete la True (inclusiv irul "False" sau caracterul "0"). La hexazecimal nu au loc conversii implicite nu exist nici un operator care s declaneze conversii implicite de acest tip i toate valorile literale hexazecimale sunt considerate numere. Codurile hexazecimale se obin cu ajutorul funciilor specifice. Operatorii din expresii vor stabili ctre care din primele trei tipuri se realizeaz conversia implicit. n acest sens, se va consulta tabelul descris la subcapitolul dedicat operatorilor. Alturi de conversia implicit provocat de operatori, exist i posibilitatea conversiei explicite, cu ajutorul funciilor de conversie, care vor fi discutate n subcapitolul dedicat funciilor AutoIt. Spre exemplu obinerea de coduri hexazecimale e posibil doar cu ajutorul acestor funcii.

X.3.2. Variabile i constante Variabilele i constantele sunt locaii de memorie care pot stoca urmtoarele categorii de informaii, n urma operaiilor de atribuire: Valori elementare i masive, literale sau rezultate ale unor expresii i funcii; Referine la obiecte COM sau proprietile acestora; Structuri de date C; Identificatori GUI. Numele variabilelor i constantelor este prefixat cu simbolul $. Declararea acestora se realizeaz cu instruciunile Dim, Local sau Global. Constantele sunt considerate variabile cu valoare fixat (vor suferi o singur atribuire). Constantele se declar adugnd cuvintele cheie Const sau Enum la oricare din cele 3 instruciuni de declarare. E posibil s se declare mai multe variabile cu aceeai instruciune i e posibil s se iniializeze oricare dintre acestea la declarare: Dim $v1, $v2=3, $v3 Instruciunea Dim e implicit, de aceea poate s lipseasc. Aceasta nu nseamn c declararea e opional, ci c declararea Dim se realizeaz implicit la iniializarea unei variabile: $v1=10 Presupunnd c aceasta e prima atribuire a variabilei v1, aceasta este echivalent cu o declarare precum: Dim $v1=10 Datorit caracterului implicit, instruciunea Dim este n general evitat. Obligativitatea sa apare n cazurile: Obligativitatea instruciunilor de declarare (Dim, Local, Global) poate fi activat cu funcia Opt ("MustDeclareVars",1) sau dezactivat prin apelul Opt ("MustDeclareVars",0);

Instruciunile de declarare sunt obligatorii n cazul variabilelor masive; Instruciunile de declarare se folosesc atunci cnd se dorete diferenierea ntre tipurile de declaraii (vezi diferenele ntre Dim, Local i Global).

Declararea de constante va conine i atribuirea valorii constante: Dim Const $c=1 Dim Enum $c1=1, $c2, $c3 Declararea prin Enum are ca efect atribuirea de valori incrementate constantelor enumerate. n exemplul de mai sus, valorile primite de $c2 i $c3 vor fi 2, respectiv 3. Opional, instruciunea Enum permite precizarea pasului de incrementare17: Enum Step 2 $c1=1, $c2, $c3 De data aceasta, valorile ultimelor dou constante vor fi 3, respectiv 5. Pasul poate fi aditiv (implicit), dar i multiplicativ: Enum Step *2 $c1=1, $c2, $c3 De data aceasta, valorile ultimelor dou constante vor fi 2, respectiv 4. Dac prima constant nu e iniializat, aceasta va primi valoarea implicit 0, folosit ca baz de incrementare. Incrementrile vor fi evitate pentru acele constante crora li se atribuie explicit valori: Enum Step -2 $c1, $c2, $c3=10 Valorile celor trei constante vor fi, n ordine: 0 (implicit), -2 (decrementat cu pasul 2) i 10 (explicit). Diferenele ntre Dim, Local i Global sunt legate de domeniul de vizibilitate a variabilei atunci cnd programul conine funcii ale utilizatorului (vezi subcapitolul dedicat funciilor utilizatorului pentru exemplificri). O declaraie Global face ca variabila s fie vizibil global, n toate modulele (funciile) creeaz riscul conflictelor de nume (variabile diferite denumite la fel n diferite module); Local declar variabile care sunt vizibile doar n modulul (funcia) n care au fost declarate. Dac alte funcii (sau programul principal) au creat deja o variabil global cu acelai nume, va fi ignorat, deci se evit un conflict de nume; O declaraie Dim face ca variabila s fie vizibil local, doar dac nu exist deja una global cu acelai nume. n cazul n care exist, Dim NU creeaz o variabil local nou (aa cum face Local)! Variabilele AutoIt pot fi elementare sau masive (arrays). Masivele pot avea pn la 64 dimensiuni indexate. Masivele cu o dimensiune indexat sunt vectori, cele cu dou dimensiuni

17

n exemplele ce urmeaz se va evita utilizarea instruciunii Dim

indexate sunt matrici. Indexarea ncepe de la zero, deci ultimul element al unui vector declarat cu dimensiunea n va avea indicele n-1. Considerm declaraia: Dim $A[2][3]=[["a","b","c"],[1,2,3]] Ultimul element al acestei matrici, valoarea 3, va fi identificat prin $A[1][2]. Primul element al matricii, valoarea "a", va fi identificat prin $A[0][0]. Urmtorul exemplu declar i iniializeaz o serie de masive: 1. Dim $A[2][3]=[["a","b","c"],[1,2,3]] 2. $B=$A 3. $A="x" 4. Dim $C[2]=[1,$B] 5. Dim $v1=2 6. $v1=$C[1] 7. $v2=$v1[0][0] Matricea $A are dou dimensiuni, prima cu 2 elemente, a doua cu 3 elemente, deci 2 rnduri i 3 coloane. Se observ din acest exemplu c masivele AutoIt sunt eterogene, exemplul conine att valori numerice ct i iruri de caractere. De fapt, matricea e omogen, coninnd doar date de tipul variant! Ultimele linii indic o serie de metode de atribuire speciale permise de AutoIt: a doua linie a exemplului copiaz structura i elementele masivului $A, n $B. Clauza Dim nu mai e necesar la declararea de masive iniializate prin copiere! a treia linie atribuie o valoare elementar unei variabile masive. Efectul va fi eliberarea memoriei masivului i convertirea sa la variabil elementar (cu iniializare) a patra linie sugereaz c un element de masiv poate lua ca valoare un alt masiv. S-a definit vectorul $C, primul element fiind numrul 1, al doilea element fiind o copie a masivului $B a asea linie extrage copia masivului $B din vectorul $C i o atribuie unei variabile elementare (deci e posibil i conversia de la elementar la masiv, fapt confirmat de atribuirea de la linia 7 unde variabila cndva elementar $v1 e folosit ca masiv. Valoarea final a lui $v2 va fi "a" (preluat de pe poziia 0,0 primul rnd, prima coloan - din masivul $v1, care conine al doilea element al masivului $C, care conine masivul $B, care este o copie a matricii $A). Copierea de masive (linia 2) i conversia de la masiv la elementar (linia 3) sunt recomandate ca operaii facile de manipulare a datelor din memoria intern. n schimb atribuirea de masive unei variabile elementare (linia 6) sau unui element de masiv (linia 5) pot afecta grav performana i consumul de memorie intern. Un masiv i poate modifica dimensiunile pe parcursul algoritmului. Aceasta necesit o redeclarare a sa cu instruciunea din exemplul: ReDim $A[2][2]

Acest exemplu redeclar matricea $A, iniializat n exemplul precedent. Redeclararea se face prin precizarea noilor limite ale dimensiunilor. Avantajul redeclarrii este c ReDim pstreaz valorile existente din matrice, vizibilitatea sa (Local, Global, Dim) i i modific doar dimensiunile. E important de reinut c ReDim nu va aduga sau terge dimensiuni, ci doar limita acestora. Astfel, urmtorul exemplu va defini un masiv nou, fr s pstreze nimic din matricea $A, deoarece s-a pierdut o dimensiune: ReDim $A[2] n mod similar cu majoritatea limbajelor pentru scripturi (JavaScript, VBScript), AutoIt are capabiliti obiectuale limitate, fiind esenial posibilitatea de a instania i referi obiecte COM, colecii de obiecte i proprietile aferente (prin calificare). Astfel, o variabil poate conine o referin spre un obiect, proprietate sau colecie de proprieti (care de regul sunt la rndul lor obiecte). Acest lucru se realizeaz prin atribuire simpl. Membrul din dreapta atribuirii va conine un obiect sau o funcie care returneaz un obiect, cum este cazul funciei de instaniere ObjCreate: $v=ObjCreate ("shell.application") $ferestre=$v.windows Prima variabil va memora o referin spre o instan a clasei shell.application, care este de fapt aplicaia shell folosit de sistemul de operare (Windows Explorer n mod implicit). A doua variabil va memora o referin spre colecia de proprieti windows, care reprezint toate ferestrele shell deschise la momentul curent (ferestrele Windows Explorer). Deoarece nu toate calculatoarele conin aceleai obiecte COM, se recomand ca fiecare instaniere s fie urmat de un test care verific succesul acesteia (vezi funciile de testare a datelor). Mai multe detalii se vor prezenta n capitolul dedicat elementelor obiectuale din AutoIt. O variabil AutoIt mai poate stoca i structuri de date C. Se tie c C este un limbaj puternic tipizat, n care tipurile datelor sunt declarate explicit i nu se modific implicit. Aceasta are impact i asupra variabilelor masive, care n C sunt considerate colecii omogene de date, n timp ce n AutoIt, o matrice poate conine date de orice tip. Pentru a crea o colecie eterogen de date, n C se poate defini o structur de date, printr-o construcie precum: struct { int v1; unsigned char v2; unsigned int v3; char v4[20]; } AutoIt permite crearea structurilor de date C i stocarea lor n variabile, cu ajutorul funciei DllStructCreate: $v=DllStructCreate("int v1;ubyte v2;uint v3;char v4[20]")

Ulterior, componentelor structurii stocate n $v li se pot atribui valori cu ajutorul funciei DllStructSetData: DllStructSetData($v,"v1",10) ...sau, componentele structurii pot fi atribuie unor variabile elementare, cu ajutorul funciei DllStructGetData: $intreg=DllStructGetData($v,1) O structur de date C e distrus dac variabilei i se atribuie valoarea 0: $v=0 Mai multe detalii vor fi prezentate n cadrul capitolului privind structurile de date C. n sfrit, o variabil mai poate conine identificatori GUI18, care se folosesc n manipularea interfeelor grafice create de AutoIt sau de alte aplicaii. Atunci cnd un macro AutoIt lucreaz cu mai multe ferestre simultan, e important ca acestea s poat fi identificate i referite fr ambiguitate. n acest scop, Windows aloc identificatori GUI unici la crearea unei ferestre sau a unui obiect GUI, sub forma unui cod hexazecimal: $IDfereastra=GUICreate("Fereastra Mea",200,200) Acest exemplu creeaz o fereastr la dimensiunile 200x200, cu titlul indicat de primul argument. Variabila $Idfereastra va stoca identificatorul GUI al ferestrei create. Atunci cnd fereastra sau obiectul sunt create de alt aplicaie i trebuie accesat de AutoIt, limbajul folosete o serie de funcii pentru citirea identificatorului GUI, ca n exemplul: $IDfereastra=WinGetHandle ("Untitled Notepad") Acest exemplu stocheaz n variabil identificatorul ferestrei Notepad. Nu doar ferestrele au identificatori GUI, ci i obiectele GUI care apar n cadrul lor (butoanele, casetele de editare, butoanele radio etc.). Identificatorii GUI sunt mecanismul prin care sistemul de operare identific unic elementele interfeei grafice Windows i AutoIt are acces la acest mecanism. Mai multe detalii se vor discuta n cadrul capitolelor dedicate programrii GUI, respectiv manipulrii ferestrelor Windows prin macrouri.

X.3.3. Macrovariabile Macrovariabilele, indicate prin nume prefixate cu @, pot fi considerate variabile read-only (nu li se pot atribui valori, nu se declar, nu se iniializeaz). Acestea au valori preluate de la mediul18

n original control handles sau window handles

de execuie. n realitate, acestea sunt fie variabile de mediu, fie macrouri predefinite i reutilizabile care returneaz o valoare. Spre exemplu macrovariabila @ScriptName indic numele fiierului n care e stocat macroul curent. Lista complet a macrovariabilelor AutoIt este indicat n tabelul de mai jos. De cele mai multe ori e vorba de informaii care descriu mediul de lucru ci de directoare, informaii privind sistemul de operare, informaii privind data i ora curent, macrouri de manipulare a ferestrelor, informaii privind obiectul GUI curent, dar i caractere speciale precum Tab, CR, LF. Tabelul prezentat aici conine toate macrovariabilele semnificaia lor este detaliat pe parcursul materialului, n cazurile concrete n care sunt folosite.

MACROVARIABILA

DESCRIEREReturneaz 1 dac macroul e compilat (executabil), altfel 0. Returneaz 1 dac executarea macroului e realizat de interpretorul AutoIt WinXP (Unicode), 0 dac e realizat de interpretorul AutoIt Win98. Aceast verificare e necesar la generarea casetelor de dialog (casetele Win98 nu pot conine butoanele Try again, Continue) Semnaleaz succesul sau eecul celei mai recente funcii apelate. Ofer codul de terminare corespunztor celei mai recente instruciuni Exit i poate fi testat de funcia OnAutoItExit. Ofer motivul terminrii macroului (terminare normal, Exit, Logoff, Shutdown) i poate fi testat de funcia OnAutoItExit. Returneaz valori suplimentare pentru anumite funcii (StringReplace) Folosit ntr-o funcie a utilizatorului, returneaz numrul de argumente din apelul curent al funciei. Returneaz numele fiierului care conine macroul curent. Returneaz numele directorului care conine macroul curent. Returneaz calea complet a macroului curent - echivalent cu rezultatul concatenrii @ScriptDir & "\" & @ScriptName Returneaz numrul liniei de cod aflate n execuie, util n depanare. Returneaz directorul de lucru curent Returneaz calea complet a macroului executabil curent

I. INFORMAII PRIVIND MACROUL AUTOIT CURENT@compiled

@unicode

@error @exitCode @exitMethod @extended @NumParams @ScriptName @ScriptDir @ScriptFullPath @ScriptLineNumber @WorkingDir @AutoItExe

@AutoItPID @AutoItVersion @InetGetActive @InetGetBytesRead

Returneaz identificatorul procesului n care se execut macroul curent (PID). Returneaz versiunea AutoIt Returneaz 1 dac un download InetGet este activ, altfel 0. Returneaz numrul de octei citii n timpul unui download InetGet, sau -1 la eroare de download.

II. INFORMAII PRIVIND OBIECTUL GUI CURENT@COM_EventObj @GUI_CtrlId @GUI_CtrlHandle @GUI_DragID @GUI_DragFile @GUI_DropID @GUI_WinHandle @HotKeyPressed Returneaz evenimentul COM activat, poate fi folosit doar n funcii privind evenimente COM Folosit ntr-o funcie handler, returneaz identificatorul obiectului GUI sau evenimentului GUI care a apelat funcia Folosit ntr-o funcie handler, returneaz handlerul obiectului GUI care a apelat funcia!!! Returneaz identificatorul obiectului GUI care a suferit o operaie Drag. Returneaz numele fiierului care a suferit o operaie Drag and Drop. Returneaz identificatorul obiectului GUI care a suferit o operaie Drop. Folosit ntr-o funcie handler, returneaz identificatorul ferestrei care a apelat funcia. Returneaz ultima tast cald apsat, conform funciei HotkeySet

III. INFORMAII DE CONFIGURARE A FERESTRELOR, utilizatempreun cu funciile WinSetState, Run, RunWait, FileCreateShortcut, FileGetShortcut @SW_DISABLE @SW_ENABLE @SW_HIDE @SW_LOCK @SW_MAXIMIZE @SW_MINIMIZE @SW_RESTORE Fereastra devine inaccesibil Fereastra devine accesibil Ascunde fereastra i activeaz alt fereastr Blocheaz poziia ferestrei Maximizeaz fereastra Minimizeaz fereastra i activeaz urmtoarea fereastr conform ordinii de creare a lor. Activeaz i afieaz fereastra la dimensiunile i poziia sa

originale (dac a fost minimizat sau maximizat anterior) @SW_SHOW @SW_SHOWDEFAULT @SW_SHOWMAXIMIZED @SW_SHOWMINIMIZED @SW_SHOWMINNOACTIVE @SW_SHOWNA @SW_SHOWNOACTIVATE @SW_SHOWNORMAL @SW_UNLOCK Activeaz i afieaz fereastra la dimensiunea i poziia sa curent Afieaz fereastra n modul implicit n care a fost definit de programul care a creat-o. Activeaz fereastra i o afieaz maximizat Activeaz fereastra i o afieaz minimizat Afieaz minimizat fereastra fr s o activeze Afieaz fereastra la dimensiunea i poziia curent fr s o activeze. Afieaz fereastra la dimensiunea i poziia anterioar, fr s o activeze. Activeaz i afieaz fereastra la dimensiunea i poziia sa anterioar Deblocheaz poziia ferestrei

IV. INFORMAII LEGATE DE BARA TRAY(zona din dreapta a barei de sarcini zona cu afiajul orei) @TRAY_ID @TrayIconFlashing @TrayIconVisible Identificatorul ultimei pictograme Tray pe care s-a dat clic. Returneaz 1 dac pictograma tray clipete, altfel 0. Returneaz 1 dac pictograma tray este vizibil, altfel 0.

V. CARACTERE SPECIALE@CR @LF @CRLF @TAB Caracterul Carriage return cu codul ASCII 13 (revenire la nceput de rnd). Caracterul Line feed, cod ASCII 10 (salt la rnd nou) Echivalent cu concatenarea @CR & @LF (salt la rnd nou cu revenire la nceput de rnd) Caracterul Tab, cu codul ASCII 9 preluate din registrul HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion @AppDataCommonDir @DesktopCommonDir @DocumentsCommonDir @FavoritesCommonDir Calea Application Data Calea Desktop Calea Documents Calea Favorites

VI. CI ALE DIRECTOARELOR DE BAZ WINDOWS

@ProgramsCommonDir @StartMenuCommonDir @StartupCommonDir @AppDataDir @DesktopDir @MyDocumentsDir @FavoritesDir @ProgramsDir @StartMenuDir @StartupDir @UserProfileDir @HomeDrive @HomePath @HomeShare @LogonDNSDomain @LogonDomain @LogonServer @ProgramFilesDir @CommonFilesDir @WindowsDir @SystemDir @TempDir @ComSpec

Calea Programs (director din Start Menu) Calea Start Menu Calea Startup Calea Application Data pentru utilizatorul curent Calea Desktop pentru utilizatorul curent Calea My Documents pentru utilizatorul curent Calea Favorites pentru utilizatorul curent Calea Programs (director din Start Menu) pentru utilizatorul curent Calea Start Menu pentru utilizatorul curent Calea Startup pentru utilizatorul curent Calea Profile pentru utilizatorul curent Litera discului care conine directorul de lucru al utilizatorului curent Calea directorului de lucru al utilizatorului curent Serverul i numele de share care conine directorul de lucru al utilizatorului curent Domeniul DNS la care s-a conectat utilizatorul curent Domeniul de login Serverul la care s-a fcut login Calea Program Files Calea Common Files Calea Windows Calea directorului sistem (System sau System32) Calea directorului cu fiiere temporare Interpretorul de comenzi secundar (utilizat de funcia Run pentru a executa comenzi MS-DOS)

VII. INFORMAII PRIVIND SISTEMUL DE OPERARE@KBLayout Codul tastaturii instalate (identificator de localizare geografic) 0409 pentru Engleza SUA, 0418 pentru Romn19.

19

Acestea sunt valorile hexazecimale. Lista codurilor de localizare geografic e disponibil la http://msdn2.microsoft.com/en-us/library/ms930130.aspx

@OSLang @OSType @OSVersion @OSBuild @OSServicePack @ProcessorArch @ComputerName @UserName @IPAddress1 @IPAddress2 @IPAddress3 @IPAddress4

Codul de localizare a sistemului de operare. "WIN32_NT" pentru NT/2000/XP/2003/Vista "WIN32_WINDOWS" pentru 95/98/Me "WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_2000", "WIN_NT4", "WIN_ME", "WIN_98", "WIN_95" Numrul de build al sisemului de operare (ex:Windows 2003 Server are codul 3790) Numrul de service pack al sistemului de operare Tipul de procesor: "X86", "IA64", "X64" Numele calculatorului n reea Identificatorul utilizatorului Adresa IP a primei plci de reea (127.0.0.1 dac s-a definit adresa localhost) Adresa IP a celei de-a doua plci de reea (alta dect 127.0.0.1 sau 0.0.0.0 dac nu exist). Idem Idem

VIII.CONFIGURAREA VIDEO A SISTEMULUI@DesktopHeight @DesktopWidth @DesktopDepth @DesktopRefresh Rezoluia vertical Rezoluia orizontal Adncimea culorilor (bii per pixel) Rata de mprosptare n herzi

IX. INFORMAII TEMPORALE CURENTE@SEC @MIN @HOUR @MDAY @MON @YEAR @WDAY @YDAY Secunde Minute Ora Ziua din lun Luna Anul n 4 cifre Ziua din sptmn (numeric, cu 1 corespunznd lui Duminic) Ziua din an (1-366)

X.3.4. Operatori

OPERATORAND OR NOT += -= *= /= + * / ^ &= & =

DESCRIEREConjuncie logic Disjuncie logic Negare logic Atribuire cu adunare Atribuire cu scdere Atribuire cu nmulire Atribuire cu mprire Adunare Scdere nmulire mprire Ridicare la putere Atribuire cu concatenare Concatenare Atribuire

Conversie implicit20La boolean La boolean La boolean La numeric La numeric La numeric La numeric La numeric La numeric La numeric La numeric La numeric La string La string Convertete variabila din stnga la tipul expresiei din dreapta La boolean, dac mcar unul din operanzi e boolean La numeric n comparaiile numeric=string Nu au loc conversii cnd ambii membri au acelai tip Comparaiile string=string nu sunt case-sensitive La string (deci nu sunt echivalente True i 1, False i 0 etc.) Comparaiile sunt case-sensitive La boolean, dac mcar unul din operanzi e boolean La numeric n comparaiile numericstring

=

Egalitate (test logic)

==

Egalitate case-sensitive

Inegalitate

Mecanismul de conversie implicit nu e asigurat doar de operatori, ci i de funciile care ateapt argumente de anumite tipuri.

20

Nu au loc conversii cnd ambii membri au acelai tip Comparaiile stringstring nu sunt case-sensitive

>

Mai mare

La numeric, cu excepia cazului n care ambii termeni sunt string (se aplic ordinea ASCII) La numeric, cu excepia cazului n care ambii termeni sunt string (se aplic ordinea ASCII) La numeric, cu excepia cazului n care ambii termeni sunt string (se aplic ordinea ASCII) La numeric, cu excepia cazului n care ambii termeni sunt string (se aplic ordinea ASCII)

>=

Mai mare sau egal

"A") 2. $b=("a">2) 3. $c=("2"=2) 4. $d=("a" == "A") 5. $e=(True>"0") 6. $f=("a" = 0) 7. $g=("a">"A") OR ("A">"a") 8. $h=("a">="A") AND ("a"2)==(True="2")) 14. $n=(0x0F=="15") 15. $o=("0x0F"==15) Valorile stocate n variabilele din stnga acestor atribuiri vor fi, n ordine: 1. Valoarea numeric 1 corespunztoare valorii logice "adevrat". Comparaia ntre caracterele "B" i "A" se realizeaz n baza codurilor ASCII (care respect ordinea alfabetic); 2. Valoarea numeric 0, corespunztoare valorii logice "fals". Comparaia necesit o conversie la numeric. Conversia literei "a" la numeric eueaz deci are ca rezultat cifra 0. n final, comparaia 0>2 are rezultat fals; 3. Valoarea boolean True, avnd n vedere succesul conversiei de la "2" la numrul 2, i faptul c egalitatea rezultat este adevrat; 4. Valoarea boolean False, avnd n vedere c egalitatea case-sensitive ntre "a" i "A" este fals; 5. Valoarea numeric 1, comparaia realizat n urma conversiei la numeric fiind 1>0; 6. Valoarea boolean True, are loc conversia la numeric, care eueaz n cazul lui "a", deci practic se compar 0=0; 7. Valoarea boolean False, avnd n vedere c ambii membri ai disjunciei sunt afirmaii False (nu are loc o comparare ntre codurile ASCII "a" i "A" sunt considerate egale); 8. Din acelai motiv, variabila primete valoarea True; 9. Egalitatea provoac conversie implicit a irului la numeric (dac mcar un membru e numeric), deci se compar 0=0. Variabila primete valoarea True; 10. Fiind o compara'ie boolean=string, se face conversie la boolean, deci se compar True=True, cu rezultatul True (vezi regulile de conversie implicit la boolean din subcapitolul privind tipizarea datelor); 11. Fiind o comparaie boolean=string, se face conversie implcit la boolean, deci se compar True=False (vezi regulile de conversie implicit la boolean din subcapitolul privind tipizarea datelor). Aadar, rezultatul este False; 12. Operatorul == convertete implicit la string, deci se compar "False"=="False", afirmaie cu valoarea True; 13. Comparaia care are loc este "1"=="True" (operatorul == convertete la string). Variabila primete valoarea False; 14. n urma conversiei la string, se compar "15"=="15", cu valoarea True; 15. n urma conversiei la string, se compar "0x0F"=="15", cu valoarea False Precedena operatorilor, aplicat pentru a stabili ordinea de calcul n expresiile fr paranteze (operatorii cu aceeai preceden sunt evaluai n ordinea n care apar n expresie, de la stnga la dreapta). 1. 2. 3. 4. 5. 6. NOT ^ */ +& < > = = ==

7. AND OR Optimizarea expresiilor poate avea loc atunci cnd rezultatul unei expresii se cunoate nainte de evaluarea sa complet, mai precis n cazul disjunciei i conjunciei: $v= False AND (......) Al doilea membru al conjunciei nu va mai fi procesat deoarece indiferent care ar fi acesta, valoarea atribuit va fi False. Acest comportament are impact atunci cnd membrii conjunciilor i disjunciilor sunt care returneaz valori booleene: If F1() OR F2() Then .... Dac F1 returneaz True, F2 nu va mai fi evaluat (deci coninutul su nu va fi executat). X.3.5. Structuri condiionale Structurile condiionale sunt structuri clasice de ramificare a algoritmului pe baza unor situaii decizionale. Condiia care controleaz ramificarea este evaluat ca o expresie cu rezultat boolean, True sau False, sau numeric, 1 sau 0 (vezi subcapitolul dedicat operatorilor) i poate conine operatori logici. AutoIt ofer trei structuri condiionale: o structur IF i dou tipuri de structuri CASE: Select i Switch. $v= ("a" = "A") If $v Then $v&=2 Else $v+=2 Endif Prima linie a acestui exemplu atribuie variabilei $v, rezultatul egalitii "a"="A". Rezultatul egalitilor este o valoare boolean, n acest caz True, datorit faptului c operatorul = nu realizeaz comparaie case-sensitive i ofer rezultat n format boolean. Aceast valoare servete drept condiie de ramificare a structurii IF. Cum valoarea este True, se execut doar ramura Then, care va modifica valoarea variabilei prin concatenarea lui 2 la valoarea True. Fiind vorba de concatenare, avem o conversie implicit la string, deci n final variabila $v va stoca valoarea "True2". Ramura Else este opional. Atunci cnd lipsete, iar ramura Then e format dintr-o singur instruciune, poate lipsi i Endif: If .... Then ..... Structurile cu ramificaie multipl (mai mult de 2 ramuri) se pot obine pe cile: Folosirea ramurei ElseIf; Folosrea structurilor IF imbricate;

Folosirea structurilor CASE, optimizate pentru ramificare multipl.

Exemplu cu ramura ElseIf: If .... Then ......... ElseIf ..... Then ........ Else ....... EndIf Aceast construcie va fi echivalent cu dou structuri IF imbricate: If .... Then ......... Else If ..... Then ........ Else ....... EndIf EndIf Ramificarea multipl poate fi asigurat mai facil prin cele dou variante ale structurii CASE. Diferena ntre Select Case i Switch Case este: Select ramific algoritmul n funcie de condiii logice (similare cu cele de la IF) Switch ramific algoritmul n funcie de valorile unei variabile de control. $v1="2" $v2=$v1+True Select Case $v1>2 $a=1 Case $v2=3 $a=2 Case "a"2, fals 2. Se compar un numr cu un numr, adic 3=3, adevrat

3. Se compar un string cu o valoare boolean, ambele se convertesc la numeric, se compar deci 0 (conversie euat) < 1 (True), adevrat 4. Ramura Case Else e implicit i se consider ntotdeauna valid de executat. Aadar, n structura Select, e posibil ca mai multe ramuri s fie valide pentru execuie, deoarece fiecare ramur e controlat de propria condiie, independent de celelalte condiii. n acest exemplu, ultimele trei ramuri sunt valide. Dintre acestea se execut doar prima, cele care urmeaz fiind ignorate (deci ramura Case Else se execut doar dac nici una din ramurile anterioare nu e valid). n concluzie, valoarea final a variabilei $a va fi 2 (prima dintre ramurile valide). Switch @HOUR Case 6 to 11 $a="dimineata" Case 12 to 15 $a="amiaza" Case 15 to 18 $a="dupaamiaza" Case 19 to 22 $a="seara" Case Else $a="noapte" EndSwitch Structura consult valoarea macrovariabilei ce indic ora curent i o compar cu intervalele indicate. Dac nici unul din cele patru intervale nu ncadreaz valoarea, se execut ramura Case Else, deci atribuirea $a="noapte". Chiar dac aceeai variabil de control (n acest exemplu macrovariabila) este verificat n toate ramurile, e posibil i la structura Switch ca mai multe ramuri s fie simultan valide, dac nu s-a asigurat corect disjuncia ntre valorile variabilei de control. Spre exemplu, dac structura conine ramurile: Case 6 to 12 $a="dimineata" Case 11 to 15 $a="amiaza" ...cele dou ramuri au intervalele de valori ale variabilei de control nondisjuncte (suprapuse pe intervalul 11-12). Ca i n cazul Select Case, se va executa doar prima ramur valid. n plus fa de cazul Select Case, la Switch exist riscul de a produce erori prin neglijarea unei pri din valorile posibile ale variabilei de control. Nu e obligatoriu ca o ramur s fie definit de un interval de valori ale variabilei de control. O ramur Case poate fi definit i n formele: Case 6 .......... Case 7 to 10, 12 to 17

.......... n acest exemplu, prima ramur se execut dac variabila de control ia exact valoarea indicat. A doua ramur se execut dac variabila de control aparine oricruia dintre cele dou intervale. O structur CASE trebuie s conin mcar o ramur Case. Celelalte, inclusiv ramura Case Else, sunt opionale. Structurile CASE pot fi la rndul lor imbricate. Structura CASE poate fi forat pentru a executa mai multe ramuri CASE succesiv i nu doar una dintre ele. Aceasta se realizeaz prin comanda ContinueCase, care ntrerupe executarea ramurii curent i foreaz executarea ramurii urmtoare (chiar dac aceasta e invalid n raport cu condiia CASE). Exemplu: $v1="2" $v2=$v1+True Select Case $v1>2 $a=1 Case $v2=3 $a=2 ContinueCase Case 0=1 $a=3 Case Else $a=4 EndSelect S-a artat deja c n lipsa instruciunii ContinueCase, variabila $a va avea n final valoarea 2 (de pe prima ramur valid). n prezena instruciunii ContinueCase, se continu prin executarea ramurii 3 (dei aceasta este invalid conform condiiei 0=1) deci n final variabila va avea valoarea 3. X.3.6. Structuri repetitive Structurile repetitive n AutoIt sunt n numr de cinci, mprite n categoriile: Structuri cu numr cunoscut de iteraii (repetiii): FOR Next; Structuri cu iteraii controlate de o condiie: While Wend, Do Until Structuri de parcurgere a coleciilor de proprieti obiectuale i a masivelor: FOR In i With Endwith. Toate structurile repetitive pot fi imbricate, cu excepia structurii With. Exemplu de structur FOR Next: $a="" For $i=2 to 6 Step 2 $a&=$i

Next Acest exemplu parcurge din 2 n 2 (clauza opional step 2) valorile dintre 2 i 6, cu ajutorul contorului de iteraii $i. Contorul de iteraie nu trebuie s fie o variabil anterior declarat (nici mcar dac s-a activat obligativitatea declarrii vezi subcapitolul Variabile i constante), ci va fi creat ca variabil cu vizibilitate local. n acest exemplu, variabila $a va acumula, prin concatenare, toate valorile contorului de iteraii, deci va avea n final valoarea "246". Pasul indicat prin clauza Step este opional i atunci cnd lipsete are implicit valoarea 1. Pasul poate avea orice valoare, de orice tip, aceasta va fi convertit implicit la numeric datorit operaiei de adunare implicit aplicat ntre contorul de iteraii i pas. Exemplu: $a="" For $i=2 to 3 Step (2=2)*"0.5" $a&=$i Next n acest exemplu valoarea pasului, numeric, va fi (n urma conversiilor implicite) True*"0.5"=1*0.5=0.5. Valorile contorului de iteraii vor fi, aadar, 2, 2.5 i 3. Prin concatenri succesive, variabila $a va acumula valoarea "22.53". Conversia la numeric se aplic i valorilor iniial i final a contorului: $a="" For $i=2 to (3=2) Step -1 $a&=$i Next n acest exemplu, valoarea final este 0 (rezultatul conversiei din False), iar pasul este negativ, deci contorul descrete. Valoarea acumulat n $a va fi "210". Ciclul FOR se oprete atunci cnd valoarea contorului o depete pe cea a valorii finale (nu trebuie s coincid cu aceasta). Pentru a evita ciclurile infinite, structura FOR va fi ignorat de interpretor n situaiile: Valoarea iniial este mai mare dect cea final dar pasul e pozitiv sau zero; Valoarea iniial este mai mic dect cea final dar pasul e negativ; E posibil ca valoarea iniial, final i pasul s fie variabile care i modific valoarea n interiorul ciclului FOR. Astfel de modificri NU afecteaz numrul de iteraii cele trei valori sunt fixate la prima iteraie. Exemplu:

$a="" $vi=0 $vf=4 $pas=2 For $i=$vi to $vf Step $pas

$a&=$i $pas+=1 $vf+=1 Next n final, valorile variabilelor vor fi: $vi=0 $vf=7 $pas=5 $a="024" (neafectat de faptul c pasul i valoarea final i-au schimbat valorile n timpul iteraiilor). Atunci cnd are loc parcurgerea de masive, devine util funcia care returneaz limitele dimensiunilor masivului. n plus, trebuie s se in cont de indexarea pornind de la zero (o dimensiune cu n elemente va fi indexat de la 0 la n-1). Considerm exemplul: $a="" Dim $V[2][3]=[["a","b","c"],[1,2,3]] For $i=0 to 1 For $j=0 to 2 $a&=$V[$i][$j] Next Next Se observ dou cicluri FOR imbricate care parcurg toate elementele matricii i le concateneaz. n final, variabila $a va avea valoarea "abc123". Se observ intervalul de valori ale contoarelorindici (0-1 pentru dimensiunea declarat cu limita 2, 0-2 pentru dimensiunea declarat cu limita 3). Atragem atenia asupra frecvenei mari a erorilor de indexare a masivelor, datorit faptului c exist numeroase limbaje cu indexare pornind de la 1 i pot apare confuzii la programatorii care nu cunosc modul de indexare folosit de fiecare limbaj n parte. n AutoIt, urmtoarea parcurgere a matricii va fi eronat, provocnd o depire a limitelor dimensiunilor matricii: $a="" Dim $V[2][3]=[["a","b","c"],[1,2,3]] For $i=1 to 2 For $j=1 to 3 $a&=$V[$i][$j] Next Next Ciclurile FOR pot folosi funcia Ubound, care returneaz limita unei dimensiuni a masivului. Parcurgerea matricii anterioare se poate realiza cu structura imbricat: $a="" Dim $V[2][3]=[["a","b","c"],[1,2,3]] For $i=0 to Ubound($A) -1

For $j=0 to Ubound($A,2)-1 $a&=$V[$i][$j] Next Next Argumentul obligatoriu al funciei indic masivul vizat. Al doilea argument, numeric i opional (apare n ciclul $j), poate lua valorile: 1,2,3... indic numrul dimensiunii pentru care se va msura limita (n ciclul $j e vorba de a doua dimensiune, deci se va returna numrul coloane a matricii) 0, caz n care funcia va returna numrul de dimensiuni i nu numrul de elemente dintr-o dimensiune. Se observ c datorit indexrii pornind de la zero, se scade 1 din valoarea funciei pentru a obine indicele ultimului elemente de pe dimensiunea respectiv. n cazul de eec, funcia Ubound returneaz 0 i comut macrovariabila @error n funcie de situaie: La 1 dac argumentul obligatoriu nu e un masiv; La 2 dac argumentul opional nu e valid. Structura repetitiv condiional e prezent n formele: While, cu pre condiie de continuare Do Until, cu post condiie de oprire Structura While execut blocul n mod repetitiv atta timp ct o condiie logic este ndeplinit (expresia logic ia valoarea 1 sau True). While plaseaz condiia la nceputul blocului iterativ, aadar e posibil ca blocul s nu se execute niciodat dac precondiia nu e ndeplinit nc de la prima tentativ de iteraie. Urmtorul exemplu e echivalent cu prima structur FOR Next din acest subcapitol: $i="2" $a=$i While $i