blog personale

Il linguaggio AutoIt

Questo articolo è già stato pubblicato su sprite magazine n.3, lo ricopio qui per permettere commenti e future espansioni/modifiche.

AutoIt (versione 3.1.1 - http://www.autoitscript.com/autoit3) è un semplice e potentissimo linguaggio di script per automatizzare le operazioni eseguite in windows. E’ gratuito e comprende funzioni per gestire mouse e tastiera, creare finestre con i controlli (bottoni, menu, spider, caselle di testo, pulsanti radio e checkbox…), manipolare files, processi, registro di sistema. Comprende una vasta libreria di funzioni matematiche, manipolazione di stringhe e array. Supporta strutture di controllo (if-then-else, While, For …), funzioni, costanti globali e inclusione di librerie. E’ possibile compilare lo script in un comodo file eseguibile di pochi Kb che non necessita di nessun file o dll esterna.
L’ultima versione di AutoIt comprende al suo interno l’editor SciTe (http://www.scintilla.org), anch’esso gratuito, con vari plugin per AutoIt.
L’editor autocompleta i nomi delle funzioni e variabili già inserite, presenta strumenti grafici per creare interfaccie GUI, offre un sistema di debug per il codice e altri tantissimi utili tools.

Con l’ambiente descritto riusciamo a creare in poco tempo programmi di vario tipo molto utili e facilmente ridistribuibili, da semplici script di gestione file a mini-gestionali.

In questo articolo costruiamo – attraverso un breve tutorial - una semplice (per motivi di spazio sul giornalino!) applicazione che si interfaccia con una pagina php online e permette di inserire e gestire news in un sito web.
Prima di iniziare qualche nozione sulla sintassi del linguaggio rispetto ai linguaggi che già conosciamo:
Le variabili devono essere precedute dal simbolo del dollaro ($), le righe di commento precedute da punto e virgola, non serve punto e virgola alla fine di ogni riga, le stringhe sono delimitate da doppi apici, per concatenare due stringhe usare l’operatore ‘&’.

1 - creazione interfaccia grafica

Creiamo un file con estensione AU3 e apriamolo con SciTe. Dal menu Tools scegliamo ‘GUI Builder’ e disegniamo più o meno il form che vedete in figura. Una volta fatto, clicchiamo su Exit per vedere inserito il codice nel nostro script.

il-linguaggio-autoit-e-il-web_html_72a4cee5.gif
il-linguaggio-autoit-e-il-web_html_m1b697b9e.gif

Il codice creato dal tool crea la finestra e i controlli disegnati attraverso le funzioni GuiCreate (vedi manuale), assegnati eventualmente ad una variabile per essere poi gestiti successivamente. Copio il codice qui sotto. Come vedete ho assegnato variabili solo a aree di testo (Edit) o bottoni (Button) con nomi significativi in modo da poterli poi richiamare e gestire successivamente.

GuiCreate("Gestione news sito", 420, 301,-1, -1)

GuiCtrlCreateGroup("Inserisci news", 10, 20, 210, 190)
$testo_news = GuiCtrlCreateEdit("", 20, 40, 190, 90)
$data_news = GuiCtrlCreateDate("Date4", 20, 140, 190, 20)
$bott_inserisci = GuiCtrlCreateButton("Inserisci", 20, 170, 60, 30)

GuiCtrlCreateGroup("Cancella news", 10, 220, 210, 50)
$id_delete = GuiCtrlCreateInput("", 100, 240, 50, 20)
GuiCtrlCreateLabel("Inserisci id:", 25, 244, 65, 20)
$bott_cancella = GuiCtrlCreateButton("ok", 170, 240, 30, 20)

GuiCtrlCreateGroup("News inserite", 230, 20, 180, 250)
$text_elenco_news_inserite = GuiCtrlCreateEdit("", 240, 40, 160, 200)
$bott_ricarica = GuiCtrlCreateButton("Ricarica dal sito", 265, 244, 90, 20)

2 – come associare funzioni ai pulsanti

Avrete notato che dopo il codice sopra riportato viene inserito un ciclo while in cui viene chiamata la funzione GuiGetMsg(), che restituisce l’identificativo del pulsante premuto. Qui dentro è possibile associare le funzioni dei vari pulsanti attraverso il Select..Case sui vari controlli.

While 1
	$msg = GuiGetMsg()
	Select
	Case $msg = $GUI_EVENT_CLOSE
		ExitLoop
	Case Else
		;;;
	EndSelect
WEnd

Esempio:

Case $msg = $bott_inserisci
 		[… codice eseguito quando si clicca sul bottone ‘Inserisci’]

3 - Creazione pagina php

La comunicazione fra il nostro script e php avviene di nascosto con il metodo GET.
In pratica per inserire la news chiamiamo pagina.php?insert= e per vedere le news inserite scarichiamo via http il contenuto di pagina.php (che restituisce l’elenco delle news) e lo inseriamo nella area di testo a destra.
Per semplicità manteniamo l’elenco delle news su un file di testo, piuttosto che in un database.

4 - Funzioni associate al pulsante “inserisci”

L’azione da associare al pulsante ‘inserisci’ (cioè dopo Case $msg = $bott_inserisci) è la seguente:

$news_inserita = StringStripWS (GUICtrlRead ( $testo_news), 7 )
$news_inserita = StringReplace ( $news_inserita, "&"  , "&")
$news_inserita = StringReplace ( $news_inserita, "<"  , "<")
$news_inserita = StringReplace ( $news_inserita, ">"  ,
">"$news_inserita = StringReplace ( $news_inserita, "?"  , "?")
$news_inserita = StringReplace ( $news_inserita, "€"  , "€")
$news_inserita = StringReplace ( $news_inserita, "°"  , "°")
$news_inserita = StringReplace ( $news_inserita, @CR  , "")
$news_inserita = $news_inserita & " - " & GUICtrlRead($data_news) 

If $news_inserita <> "" Then
InetGet ("http://www.sito.it/pagina.php?insert=" & $news_inserita, "down.tmp", 1 )
MsgBox(0,"","inserimento ok", 2);
Else
MsgBox(0,"","Testo non inserito");
EndIf

Cioè prendiamo il testo dall’area di testo (funzione GUICtrlRead), ed elaboriamo la stringa (doppi spazi, codifica per passare il testo nella URL per la pagina php), aggiungiamo la data letta dal relativo controllo, poi chiamiamo via http (funzione InetGet) la pagina php passando nella URL la stringa elaborata.

5- Funzione associata al pulsante ‘Ricarica dal sito’

Nel relativo Case (Case $msg = $bott_ricarica) dobbiamo semplicemente scaricare il file e caricare il suo contenuto nell’area di testo a destra (funzione GUICtrlSetData ).

InetGet ("http://www.sito.it/pagina.php", "down.dat", 1 )
$file = FileOpen("down.dat", 0)
$news_from_sito=""
While 1
$news_from_sito = $news_from_sito & FileRead($file, 1)
If @error = -1 Then ExitLoop
Wend
$news_from_sito = StringReplace ( $news_from_sito, ""  , @CRLF)
GUICtrlSetData ($text_elenco_news_inserite,   $news_from_sito )

6 - completamento e creazione eseguibile

Il meccanismo della cancellazione avviene in modo simile all’inserimento, cioè passando come parametro l’identificativo della news da cancellare, poi la pagina php si preoccuperà di cancellarla effettivamente.
Il programmino può essere poi ampliato per esempio inserendo una password per l’utilizzo e per il passaggio di parametri alla pagina php.
Ciccando col tasto destro sul file au3 e scegliendo “Compile Script” viene generato in pochi Kb l’eseguibile funzionante, forte, eh ?

Conclusioni

Le potenzialità e semplicità di AutoIt lo rende - in alcuni casi - più comodo di altri linguaggi e relativi ambienti di sviluppo.
Consultate il sito di AutoIt, il suo forum e provate a utilizzarlo… sono sicuro che prima o poi vi tornino utili le sue funzionalità. Date un’occhiata anche al sito dell’editor SciTe, supporta molti linguaggi con relativi tools ed è un software veramente valido che sicuramente apprezzerete.
Se volete il codice completo del piccolo esempio fatto o maggiori informazioni non esitate a contattarmi.
Buon lavoro, programmatori !

4 Responses to “Il linguaggio AutoIt”

  1. Luigi

    on April 11 2007

    ottimo articolo !

  2. Fabio

    on April 12 2007

    Articolo molto interessante! Questa è sicuramente una cosa che mi piacerebbe imparare :-)

  3. domenico cap

    on December 17 2008

    ciao, ho windows vista, ho installato un programma, per errore, ed ora all’avvio se mi il pc e’ conneso ad internet si sento dei gemiti, se non sono connesso all’ avvio mi esce scritto : autolt error , line -1 , error:eccetera. come posso eliminare tutto questo e ritornare come prima? ti ringrazio in anticipo.

  4. admin

    on December 18 2008

    che io sappia il setup di autoit non installa nulla in avvio.
    in ogni caso è strano che dia errore.
    puoi disattivare i componenti all’avvio da
    start->esegui->”msconfig”
    lì vedi tutti i componenti che partono, troverai qualcosa relativo allo script che dà errore.
    ciao

Comment RSS · TrackBack URI

Leave a comment

Name: (Required)

E-mail: (Required)

Website:

Comment:


 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiphp