AutoIt3: Despre GUI-uri, cu calm (VII)


Numărul de lecturi arată că seria despre AutoIt3 nu este chiar cea mai fascinantă, dar merg mai departe pentru că mie unuia îmi place chiar foarte mult acest program… generator de programe. Pentru astăzi vă propun un program care îşi poate avea utilitatea lui. Să zicem că am dori, spre monitorizare, să se facă periodic capturi la tot ecranul, care să fie salvate în (My) Documents. Probabil pe undeva se găseşte un astfel de program, dar de ce să nu facem noi? De data aceasta GUI-ul nu va mai fi o fereastră tradiţională ci doar un meniu la o iconiţă din systray. După cum vedeţi mai jos, când face captură anunţă printr-un “balon”. Are un meniu, de unde procesul de capturare a ecranului poate fi oprit sau pornit.

imagine

Programul, când este activ, îşi face singur treaba. În (My) Documents vor apare pe rând capturile, purtând data, ora, minutul şi secunda, astfel că fiecare nume de captură va fi în mod clar diferit de un altul anterior. Cât de greu este să scriem un astfel de program? Ia doar câteva zeci de rânduri de cod.

imagine

Să vedem acum codul. Crearea meniului nu cred că necesită explicaţii. Cu linia 9 şi 11 am pus separatorii în meniu. TimerInit() e folosit pentur măsurarea timpului. Variabila $einceput ne ajută doar la început, ca să nu aşteptăm scurgerea celor 10 secunde. În fine, $eactiv ne dă indicaţie despre opţiunea Activ din meniu, dacă e bifată sau nu (implicit e bifată). Mai apare o variabilă $k, mai mult de siguranţă. Dacă cineva uită programul pornit, după 100 de capturi el se opreşte (să nu se umple harddiskul). Din linia 21 începe bucla infinită. Ce facem în ea?

[PHP]#Include <Constants.au3>
#include <ScreenCapture.au3>
#include <Date.au3>

Opt("TrayMenuMode",1)

$activ = TrayCreateItem("Activ")
TrayItemSetState(-1,$TRAY_CHECKED)
TrayCreateItem("")
$despre = TrayCreateItem("Despre")
TrayCreateItem("")
$exititem = TrayCreateItem("Ieşire")
$Init = TimerInit()
TraySetIcon("Shell32.dll",-303)
TraySetState()
$inceput = True
$eactiv = True
$k=1
_ScreenCapture_SetJPGQuality(100)

While 1
If (TimerDiff($Init) > 10000 Or $inceput = True) And $eactiv=True Then
_ScreenCapture_Capture(@MyDocumentsDir & "\captura-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @MSEC & ".jpg")
TrayTip("Zâmbiţi vă rog…", "Acum se face captura!", 1, 1)
Sleep(2000)
TrayTip("","",0)
$inceput = False
$Init = TimerInit()
$k=$k+1
If $k=100 Then
MsgBox(0,"No gata","Prea multe capturi. Se umple harddiskul!")
ExitLoop
EndIf
EndIf
$msg = TrayGetMsg()
Select
Case $msg = $despre
TrayItemSetState($despre,$TRAY_UNCHECKED)
MsgBox(0,"Despre","Face periodic captura întregului ecran.")
Case $msg = $activ
If BitAND(TrayItemGetState($activ), $TRAY_UNCHECKED) = $TRAY_UNCHECKED Then
$eactiv = False
TraySetIcon("Shell32.dll",-3)
Else
$eactiv = True
TraySetIcon("Shell32.dll",-303)
EndIf
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit[/PHP]

Testul din linia 22 ne spune dacă e cazul să facem captura. Dacă e cazul facem captura şi emitem un „balon” în systray. Apoi aşteptăm 2 secunde şi ascundem balonul. Liniile 25-26 s-ar putea şterge, caz în care balonul dispare singur, cu fade, după câteva secunde. Resetăm timer-ul şi verificăm dacă nu s-a exagerat cu capturile. Ce vine mai departe nu are nevoie de explicaţii… poate doar să spun că în liniile 43 şi 46 schimbăm iconiţa, ca să se înţeleagă când e aplicaţia activă şi când nu.

PS: Toate fişierele acestei serii de tutoriale sunt publice şi descărcabile de aici. Exemplele de aici sunt fereastra11.au3 cu executabilul capturi.exe.


Apreciază articolul:

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

7 comentarii

  1. radu.capan spune:

    Un exemplu mai complex am gasit aici
    http://autoit.pastebin.com/f1715feeb
    (nu e o locatie foarte stabila, stiu)

  2. jocker spune:

    Salut. Ai idee cum pot adauga un Emboss text?

  3. radu.capan spune:

    Nu cred că se poate cu AutoIt direct, pe text, ci eventual facut efectul într-un editor de imagini si inserata imaginea rezultata.

  4. jocker spune:

    Eu ma refeream la cel de la Examples din AutoIT, cand rulez scriptul salveaza o captura cu un text in stanga sus si ma gandeam ca si aplicatiei pe care ai creat-o tu i se poate implementa aceea functie. 😐

  5. radu.capan spune:

    Aha: deci un fel de watermark. Dar textul ca sa fie mai lizibil il vrei cu efectul emboss. Am inteles bine? Da, se poate exemplul din …AutoIt3\Examples\GUI\Advanced\Emboss.au3 combina cu ce e mai sus.

  6. jocker spune:

    Da, ai inteles bine….

    Ieri m-am chinuit sa introduc functiile librariei GDI+ pe care le-am vazut in acel exemplu, in aplicatia ta dar nu am resuit. :(

  7. radu.capan spune:

    Am retinut. Am sa incerc sa fac ceva.


Lasă un răspuns

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