AutoIt3: să începem să programăm!


Ieri am scris despre AutoIt, ajuns la versiunea 3.3, şi mi-am luat angajamentul de a mai scrie câte ceva despre utilizarea lui. M-am gândit să ţintim sus de tot. Haideţi să scriem împreună un program. Şi nu care să scrie Hello şi gata. Unul care să facă ceva util. Unul de care să fiţi mândrii că l-aţi scris (mă rog, copiat) şi compilat chiar Dvs. Vă propun să scriem un program care la o combinaţie de taste să ascundă programul curent (fereastra activă). De fapt va fi ca şi cum o va trimite în systray, unde la ascundere apare ca o nouă linie în meniul aplicaţiei (vedeţi captura de mai jos). Pentru a reactiva aplicaţia o selectăm din meniul din systray. Practic oferă un fel de boss key (nu ştiţi ce înseamnă? unele aplicaţii au o combinaţie de taste care ascunde aplicaţia, astfel că atunci când intră şeful în birou scapi de pe ecran de ce nu trebuie, dar apoi poţi reactiva ulterior respectivul program).

mintotray

Am spus ieri că AutoIt e tare în special prin adăugarea GUI-ului (interfeţei grafice). Ei bine, aici nu vom folosi prea multă interfaţă grafică. De fapt va fi o fereastră (Despre) şi iconiţa cu meniu din systray. Atât. Cu prima linie spunem că aplicaţia rulează în tray. A doua linie e mai tehnică (ne permite capturarea id-ului unei ferestre). În a treia linie am definit combinaţia de taste: CTRL+F1, care va apela funcţia Ascunde(). Înainte de funcţii iniţializăm nişte variabile. fer va fi pentru fereastra curentă (identificatorul ei); icrt va număra la a câta aplicaţie minimizată în systray am ajuns; apoi avem două şiruri, elemente pentru corespondenţele din meniu pentru ferestre minimizate şi ferestre pentru id-urile ferestrelor.

[PHP]Opt(„TrayMenuMode”,1)
AutoItSetOption(„WinTitleMatchMode”, 4)
HotKeySet(„^{F1}”, „Ascunde”);

$fer = „”
$icrt=0
dim $elemente[30]
dim $ferestre[30]

Func Ascunde()
$fer = WinGetHandle(„[ACTIVE]”)
WinSetState ( $fer, „”, @SW_HIDE )
$elemente[$icrt] = TrayCreateItem(WinGetTitle($fer))
$ferestre[$icrt] = $fer
$icrt += 1
EndFunc

func Arata($i)
WinSetState($ferestre[$i], „”, @SW_SHOW)
TrayItemDelete($elemente[$i])
endfunc

func ArataToate()
For $i=0 To $icrt-1
WinSetState($ferestre[$i], „”, @SW_SHOW)
TrayItemDelete($elemente[$i])
Next
endfunc

$despre = TrayCreateItem(„Despre”)
$iesire = TrayCreateItem(„Iesire”)
TrayCreateItem(„”)
TraySetIcon(„Shell32.dll”,-20)
TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $despre
Msgbox(64,”Despre”,”Un program demonstrativ CNet.ro”)
Case $msg = $iesire
ArataToate()
ExitLoop
EndSelect

For $i = 0 To 30-1
If $msg == $elemente[$i] And $elemente[$i] <> „” Then
Arata($i)
ExitLoop
EndIf
Next
WEnd[/PHP]

Avem trei funcţii. Ascunde pur şi simplu ascunde fereastra activă. Aflăm identificatorul ei, o ascundem, punem numele ei în meniul aplicaţiei din tray, memorăm identificatorul ei şi creştem contorul. Arata se declanşează când din meniul aplicaţiei din tray vrem să reafişăm o aplicaţie. Pur şi simplu o arătăm şi ştergem numele ei din meniul aplicaţiei noastre. În fine, ArataToate e funcţia anti-proşti*: dacă cineva iese din programul nostru fără să fi reafişat aplicaţiile ascunse? Ele rămân ascunse. Tocmai de aceea ne asigurăm că la ieşirea din program reafişăm tot ce a fost ascuns.

În liniile 30-34 ne ocupăm de aplicaţia din tray, de meniul şi iniţializarea ei. Apoi vine o buclă ciudată, dar specific AutoIt. Un while 1 e o buclă infinită, dar mai important e că, în ciuda aparenţelor, nu va consuma non-stop procesor. Are grijă AutoIt de aceasta. Deci: în respectiva buclă infinită noi analizăm mesajele primite de aplicaţia din tray. Evident că un alt punct de „intrare” îl constituie combinaţia de taste definită în linia 3. Acestea sunt punctele de interacţiune: apăsare CTRL+F1 sau click pe o aplicaţie minimizată în meniul aplicaţiei noastre.

Ei? Ce spuneţi? Cu 54 de rânduri simple avem un program care nu e de lepădat. Evident nu este nici perfect. De exemplu am definit o limită de 30 de aplicaţii de minimalizat. Probabil puţini o vor atinge, dar teoretic ar trebui să verificăm depăşirea pragului. Apoi ar fi frumos ca utilizatorul să îşi poată defini singur combinaţia de taste. În fine, sunt unele programe, puţine, cărora nu le place ascunderea şi atunci ele ar trebui excluse de la miminizare în systray. Dar pentru ceea ce doream noi – didactic – să arătăm e bine. E un program închegat pe care desigur nimeni nu vă opreşte să îl dezvoltaţi mai mult.

Descărcaţi de aici sursa şi executabilul. Compilaţi Dvs sursa. Modificaţi-o. Adăugaţi-i noi facilităţi. Aveţi un punct de pornire…

* Nu vreau să jignesc pe nimeni. Când eram în liceu şi în facultate (nu ştiu dacă şi astăzi se mai practică / se mai spune aşa) eram mereu întrebaţi când programam: dar măsuri anti-proşti aţi luat? Un program nu e bun până când nu previne imaginaţia nelimitată a proştilor necunoscătorilor.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

2 comentarii

  1. Computerică spune:

    M-am jucat si eu nitel si uitati ce a iesit: (click) aici. La multi ani tuturor!

  2. X2 spune:

    E super exemplu. Ms mult mult.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *