[Guida], Autoit

« Older   Newer »
  Share  
Nagato Aka Pain
view post Posted on 26/2/2010, 19:34     +1   -1




GUIDA : Autoit – Il linguaggio di automatizzazione per eccellenza (IMHO)

______________________________________________________________________________

--Installazione--

Innanzitutto scaricate il Pacchetto Completo qui : Autoit Full Installation

Questo pacchetto installerà nel vostro sistema:
- File essenziali al Funzionamento di Autoit v3
- Aut2Exe : ottima Utility per convertire i vostri script AutoIt in Exe compilati.
- L'addon AutoItX per gestire i controlli sulle DLL e sulle COM
- Una versione dell'editor SciTE con il riconoscimento automatico della sintassi di AutoIt.

Vi consiglio, durante l'Installazione, di modificare gli Script Autoit.
Ora andate su Start / Tutti i programmi / AutoIt v3 / SciTE Script Editor

Vi si aprirà dunque l'Interfaccia grafica dell'editor.

Cliccate su File / New, si aprirà un foglio virtuale. Qui è dove scrivere il vostro Script.
Nota : I files dello SciTE verranno salvati con estensione *.au3

Per eseguire il codice dovrete salvare in un file(*.au3) e poi andare in Tools / Go (o F5).


--Iniziare a programmare--

--Hello World, l'inizio--

Cominciamo subito a programmare (anzi, scriptare :-D).

Lo script in questione non fa altro che stampare a schermo, in una MsgBox (vedremo più avanti), il messaggio “Hello Word !”.

Vi consiglio, comunque, di scrivere la seguente Riga anziché copiarla ed incollarla :


CODICE
Msgbox (0, "Titolo", "Hello World !")


Se, anziché copiare ed incollare, avete scritto il comando MsgBox correttamente, avrete certamente notato che lo SciTE ha riconosciuto la sintassi e fornito la lista di tutti i parametri necessari.

I parametri sono sempre divisi tra virgole ed inseriti tra parentesi, inoltre sono tutti obbligatori tranne quelli compresi tra parentesi quadre;

Es. : ( $ciao[,$var])
Va da sé, quindi, che la variabile $ciao sarà obbligatoria, mentre la variabile $var sarà opzionale.





Analizziamo dunque lo Script “Hello Word”.

CODICE
MsgBox(0,"Titolo","Hello Word !")


Come avrete notato, il primo valore è 0.
Il valore si riferisce al Parametro “flag”, che settato a 0 non restituisce icone o tasti.

Come seconda e terza stringa, “Titolo” e “Hello Word !”, abbiamo passato invece -come già detto- una Stringa Alfanumerica. Le stringhe sono comprese tra gli apici " ".

Il quarto parametro opzionale indica il timeout, ovvero il tempo che deve passare prima che la finestra si chiuda.
In questo caso il valore default non restituisce nulla, infatti sarà necessario premere il tasto “OK” per far sì che la MsgBox vada via.

----Variabili e Macro--
Le variabili in AutoIt sono facilmente riconoscibili: cominciano sempre con il simbolo del dollaro, $ , e vengono riconosciute dalla sintassi dello SciTE con un colore vicino al bordeaux.
Le variabili possono essere considerate “scatole” contenenti un determinato valore.
Il valore può essere cambiato durante l'esecuzione dello Script.

Per assegnare un valore a una variabile è sufficiente scrivere:


CODICE
$var = 6
$var2 = "stringa"



Nel primo caso la $var assumerà il valore 6, nel secondo caso la $var2 assumerà valore "stringa".

LE VARIABILI GIOCANO UN RUOLO ESSENZIALE ALL'INTERNO DI QUALSIASI SCRIPT.

Perchè ? Perchè anche le funzioni si servono di variabili.
Come esempio prenderemo StringUpper, che ritorna la stringa inserita con i caratteri in maiuscolo.



CODICE
$upped = StringUpper ( "ciao." )
Msgbox (0, "Danyez urla :", $string_uppde)



Assegniamo quindi al Value di ritorno della funzione la variabile $upped.

Vogliamo fare prima ? Il processo si può abbreviare in questo modo :


CODICE
Msgbox (0, "Danyez urla :", StringUpper ( "ciao." ))





Le macro invece cominciano sempre con la @ e, al contrario delle variabili, hanno un valore predefinito non modificabile dallo scripter.
Le macro possono rappresentare valori costanti o variabili nel tempo.
Un esempio di Macro è dato da @ScriptName.

CODICE
Msgbox (0, "Il nome dello Script", @ScriptName)



Una variabile può assumere anche il valore di una macro :

@YEAR, ad esempio, restituisce l'Anno in quattro cifre :


CODICE
$anno = @YEAR
Msgbox (0, "Siamo nell'anno :", $anno)


Vi inserisco, quindi, una lista di tutte le Macros di Autoit (in italiano) :

SPOILER (click to view)
@AppDataCommonDir = restituisce la directory dati applicazioni comune
@AppDataDir = restituisce la directory dati applicazioni dell’utente corrente
@AutoItExe = restituisce la path dove risiede il file compilato in esecuzione (se non compilato riporta l’interprete altrimenti lo stesso script compilato)
@AutoItPID = restituisce il PID del processo dello script
@AutoItUnicode = ritorna 1 se si avvia usando la versione unicode di autoIt o 0 se si usa quella ANSI
@AutoItVersion = ritorna la versione attuale di autoIt
@AutoItX64 = ritorna 1 se lo script viene eseguito su un sistema x64
@CommonFilesDir = ritorna la directory dei file comuni
@Compiled = ritorna 1 se lo script da cui viene eseguito è compilato, altrimenti 0
@ComputerName = ritorna il nome del computer
@ComSpec =ritorna la path dove risiede il file cmd (prompt dei comandi)
@CR = viene usato come separatore
@CRLF = permette di ritornare a capo
@DesktopCommonDir = ritorna la directory del desktop comune
@DesktopDir = ritorna la directory del desktop dell’utente corrente
@DesktopHeight = ritorna la risoluzione verticale del monitor in pixel
@DesktopWidth = ritorna la risoluzione orizzontale del monitor in pixel
@DesktopRefresh =ritorna il refresh dello schermo in hertz
@DocumentsCommonDir = ritorna la directory dei documenti comuni
@error = ritorna lo status dell’errore
@exitCode = ritorna il codice di uscita
@exitMethod = ritorna il metodo di uscita
@extended = macro usata per ampliare il funzionamento di alcune funzioni (come StringReplace)
@FavoritesCommonDir = ritorna la directory dei favoriti comuni
@FavoritesDir = ritorna la directory dei favoriti dell’utente corrente
@HomeDrive = ritorna la lettera dell’ hard disk corrente (esempio: C:)
@HomePath = ritorna la directory dell’utente corrente (Deve essere usato in congiunzione con @HomeDrive )
@HOUR = ritorna l’ora corrente (da 0 a 23)
@HotKeyPressed = identifica l’ultima tasto premuto
@InetGetActive = ritorna 1 se la funzione InetGet è attiva altrimenti 0
@InetGetBytesRead = durante la funzione InetGet ritorna il valore in bytes dei dati scaricati, ritorna -1 se c’è un errore
@IPAddress1 = ritorna l’indirizzo ip del primo adattatore di rete. (se non riesce a trovare l’ip ritorna 127.0.0.1 [cioè localhost])
@IPAddress2 = ritorna l’indirizzo ip del secondo adattatore di rete (se non riesce a trovare l’ip ritorna 0.0.0.0 )
@IPAddress3 = idem con la funzione precedente
@IPAddress4 = idem con la funzione precedente
@KBLayout = ritorna il codice restituito dalla tastiera
@LF = serve come un tasto tab
@LogonDomain = ritorna il nome del dominio
@MDAY = ritorna il numero del giorno. ( da 01 a 31 )
@MIN = ritorna i minuti (da 00 a 59 )
@MON = ritorna il numero del mese (da 01 a 12 )
@MyDocumentsDir = ritorna la directory dei documenti dell’utente corrente
@NumParams = ritorna il numero di parametri usati in una funzione
@OSBuild = ritorna il numero di costruzione del sistema operativo
@OSLang = ritorna il codice della lingua dell’ O.S (Operative System)
@OSServicePack = ritorna il nome del Service Pack
@OSTYPE = ritorna il tipo di sistema operativo
@OSVersion = ritorna la versione dell’ O.S
@ProcessorArch = ritorna l’architettura del processore
@ProgramFilesDir = ritorna la directory della cartella Programmi
@ProgramsCommonDir = ritorna la directory della cartella programmi comuni
@ProgramsDir = ritorna la directory della cartella programmi dell’utente corrente
@ScriptDir = ritorna la path dove è situato lo script (attenzione non ha / finale)
@ScriptName = ritorna il nome dello script
@ScriptFullPath = ritorna la directory completa di dove è situato lo script (è un unzione di 2 macro : @ScriptDir & "" & @ScriptName)
@ScriptLineNumber = ritorna il numero di linee dello script (principalmente usato per il debug)
@SEC = ritorna il numero di secondi (da 00 a 59)
@StartMenuCommonDir = ritorna la directory comune del menu start
@StartMenuDir = ritorna la directory dell’utente corrente del menu start
@StartupCommonDir = ritorna la directory comune dell’avvio automatico
@StartupDir = ritorna la directory corrente dell’avvio automatico dell’utente
@SW_DISABLE = permette di disabilitare una finestra (usato come opzione in alcune funzioni)
@SW_ENABLE =permette di abilitare una finestra (usato come opzione in alcune funzioni)
@SW_HIDE = permette di nascondere una finestra (usato come opzione in alcune funzioni)
@SW_LOCK = permette di bloccare una finestra (usato come opzione in alcune funzioni)
@SW_MAXIMIZE = permette di massimizzare una finestra (usato come opzione in alcune funzioni)
@SW_MINIMIZE = permette di minimizzare una finestra (usato come opzione in alcune funzioni)
@SW_RESTORE = permette di far ritornare normale una finestra (usato come opzione in alcune funzioni)
@SW_SHOW = permette di visualizzare una finestra (usato come opzione in alcune funzioni)
@SW_UNLOCK = permette di sbloccare una finestra (usato come opzione in alcune funzioni)
@SystemDir = ritorna la path della directory di sistema
@TAB = permette di simulare il tasto tab
@TempDir = ritorna la path della directory dei file temporanei
@TrayIconFlashing = ritorna 1 se l’icona nella tray lampeggia altrimenti ritorna 0
@TrayIconVisible = ritorna 1 se l’icona nella tray è visibile altrimenti ritorna 0
@UserProfileDir = ritorna la path della directory dell’utente corrente
@UserName = ritorna l’username al momento connesso
@WDAY = ritorna il numero del giorno della settimana (da 1 a 7)
@WindowsDir = ritorna la directory WINDOWS
@WorkingDir = ritorna la directory di lavoro
@YDAY = ritorna il numero del giorno dell’anno (da 1 a 366)
@YEAR = ritorna l’anno corrente (esempio: 2008)


--Array--

Se la variabile è una scatola contenente un valore, l'Array allora è un insieme di scatole.
L'Array, in pratica, è un contenitore di più variabili.
Per riempire un Array di valori (in gergo si tende ad usare l'espressione “popolare un array”), si può fare in questo modo :


CODICE
Dim $array[5] = [8, 4, 5, 9, 1]



In questo caso dichiariamo (Dim) un array($array) composto da cinque elementi([5]), equivalenti a 5 numeri ([8, 4, 5, 9, 1]).




----Operazioni-con-i-files--


Le funzioni che agiscono sui files iniziano sempre con *File o *_File.


1. Aprire un file:

FileOpen

Da una funzione FileOpen ritorna sempre la directory (handle) di un file che potrà essere usato in altre funzioni.

Autoit ci richiede il metodo di apertura del file (mode) :

0 = Read mode
1 = Write mode (aggiunge alla fine del file)
2 = Write mode (elimina dati precedenti e sovrascrivi)
4 = Read raw mode
8 = Crea la struttura di una Directory se quella specificata non esiste.




2. Scrivere in un file:

FileWrite o FileWriteLine.

Le due funzioni sono uguali, ma la seconda aggiunge un @CRLF e va a capo riga.

3. Leggere un file:

FileRead


Il primo parametro richiede l'Handle del file.
Il secondo parametro richiede il numero di caratteri da leggere.
Se il secondo parametro è omesso verranno letti tutti i caratteri.

4. Chiudere un file:

FileClose

Devo anche spiegarvelo ? :-D


5. Cancellare un file:

FileDelete

Anche questo non ha bisogno di spiegazioni :-D


_______________________________________________________________
PROSSIMO ARGOMENTO : STRUTTURE SELETTIVE.______________

-- Strutture Selettive --
----If|Then|Else|ElseIf|EndIf--

Innanzitutto, per chiarire meglio il funzionamento del Ciclo If, analizziamolo secondo il suo significato :-P

Parole chiave :
If = "Se"
Then = letteralmente "dopo", ma si può intendere come "allora".
Else = "altrimenti".
ElseIf = "altrimenti se".
EndIf = "fine dell'If".

If ... Endif, quindi, verifica l'avverarsi -o meno- di una condizione posta tra If e Then.

Se la condizione risulta vera (= True) esegue il codice dopo Then.
Se la condizione, invece, risulta vera verrà eseguito (indovinate un po' ? :-P) il codice sotto a Else.
ElseIf è una particolare condizione. Essa non richiede solo il value di ritorno della prima condizione Falso (=False), visto che affinchè venga eseguito il codice sotto di esso la condizione tra If e Then deve essere falsa mentre la condizione tra ElseIf e Then deve essere vera.
EndIf chiude il ciclo If e quindi il codice sotto di esso non sarà compreso tra le condizioni.



----Select|Case|EndSelect--



CODICE
Select
 Case $x>1
    Msgbox (0, "", "$x è maggiore di 1")
 Case Else
    Msgbox (0, "", "$x è minore o uguale a 1")
EndSelect




Select ... EndSelect verifica le condizioni sotto ogni Case ed esegue il codice non appena la condizione risulta vera in uno dei Case.


----Switch|Case|EndSwitch--



CODICE
Switch $x
 Case 2
    Msgbox (0, "", "$x è 2")
 Case 4
    Msgbox (0, "", "$x è 4")
 Case 6
    Msgbox (0, "", "$x è 6")
EndSwitch




In questa struttura viene preso in esame una sola variabile, che viene precisamente citata dopo Switch.
Durante l'esecuzione viene verificato se il valore contenuto dentro alla variabile equivale ad un valore specificato.
Questo valore è definito dopo ogni Case.



--------Strutture-Iterative----
----For|To|Step|Next--



CODICE
For $i = 5 to 35 step 5
 MsgBox(0,"Ciao","Il valore della variabile è $i")
Next




Esegue il codice compreso tra For e Next fino a che $i=5 non raggiunge $i = 35. In questo caso il ciclo For incrementa di Cinque (Step 5).
Definire Step non è obbligatorio, l'incremento di Default sarà 1.

----While|WEnd--



CODICE
$num = 0
While 1 = 1
$num=$num+1
MsgBox(0,"",$num)
Wend



Stabiliamo che la variabile $num è uguale a 0.
Poi all'inizio del Ciclo While incrementiamo la variabile di 1 e la mostriamo in una MsgBox.

In questo caso, essendo While 1 = 1 (abbreviato anche in While 1) una condizione sempre vera (ma và ? :-D) il Ciclo risulterà infinito.


--Do|Until--


CODICE
$var = 0
Do
$var = $var+1
MsgBox(0,"",$var)
Until $var = 10




Esegue il codice inserito dopo Do -incrementa la variabile $var di uno- finchè non si verifica la condizione posta dopo Until.

_______________________________________________________________
PROSSIMO ARGOMENTO : CREARE UNA GUI.______________

--Creare una GUI--

Bene, abbiamo i rudimenti base per la programmazione in Autoit.
La domanda ora sorge spontanea .. "Sì, so fare queste cose ma .. la Grafica ?"

Il vostro desiderio è esaudito. u.u





CODICE
#include <GUIConstants.au3>


$form1 = GUICreate("La mia GUI", 216, 132)
$label1 = GUICtrlCreateLabel("Io sono un Label di una GUI.", 24, 24, 163, 17)
$button1 = GUICtrlCreateButton("Io sono un tasto di una GUI.", 16, 72, 185, 33)

GUISetState(@SW_SHOW)


While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
    Case $GUI_EVENT_CLOSE
       Exit

 EndSwitch
WEnd



La creazione di una GUI, in Autoit, è forse l'elemento più semplice tra tutti.
Infatti i creatori del linguaggio offrono una vasta gamma sotto questo punto di vista e ci forniscono alcune variabili preimpostate dal Team.
Un esempio, inserito nel precedente codice, è proprio il termine #include.
Chi ha conoscenze in C/C++ riconoscerebbe facilmente il comando, ma anche chi è agli inizi potrà comprendere il significato della parola ! :-P
La libreria <guiconstants.au3>, invece, include le funzioni principali per una GUI.


CODICE
#include <GUIConstants.au3>


_________


Ora passiamo alla creazione vera e propria del Form, la finestra del nostro programma.
A questo proposito utilizziamo la funzione GUICreate().


CODICE
$form1 = GUICreate("La mia GUI", 216, 132)



Il primo parametro indica il titolo della finestra, che risulterà "La mia GUI".

Il secondo e il terzo parametro indicano rispettivamente larghezza e altezza della nostra finestra.

Il quarto e quinto parametro, facoltativi, indicano invece la posizione della finestra nello schermo; di Default questa apparirà centrata allo Schermo.

Il sesto e settimo parametro indicano gli stili della finestra, ovvero dei parametri che abilitano la vostra GUI a possedere alcune "particolarità". L'Help di Autoit contiene una lista dettagliata di tutte le possibilità.
L'ottavo parametro consente di indicare un form che funga da Finestra Principale per la finestra creata.

Ovviamente tra tutti questi l'unico valore obbligatorio è il Testo della GUI, mentre tutti gli altri valori avranno di Default dei parametri scelti dal Team di Autoit.


Bene, abbiamo la nostra GUI.
Ora procediamo con l'inserimento di controlli (Tasti , Label , Input , TextBox , etc.).
Il metodo è piuttosto semplice.
Il comando è GUICtrlCreate*, dove * è il controllo che vorremo creare.


CODICE
$button1 = GUICtrlCreateButton("Io sono un tasto di una GUI.", 16, 72, 185, 33)



Il primo parametro indica il testo all'interno del tasto.
Il secondo e il terzo parametro ne stabiliscono la posizione.
Il quarto e il quinto parametro stabiliscono la grandezza del controllo.
Il sesto e settimo parametro indicano gli stili del controllo,ovvero dei parametri che abilitano il vostro tasto a possedere alcune "particolarità". - La stessa cosa della GUI :-D - L'Help di Autoit contiene una lista dettagliata di tutte le possibilità.


IMPORTANTE: Dalle variabili dei controlli ritorna sempre lo stato dello stesso, è ESSENZIALE ricordarlo per affrontare i prossimi argomenti.


Abbiamo dunque costruito la nostra GUI.
Ora dovremo precisare lo stato della GUI stessa.


CODICE
GUISetState(@SW_SHOW)




La macro @SW_SHOW stabilisce che la finestra selezionata deve essere visibile.
In questo caso abbiamo omesso un valore all'interno di GUISetState, che non trovandolo avrà come Default l'ultimo controllo creato.


Giungiamo dunque alla parte più "divertente" della GUI, ossia gli eventi legati ad un tasto o ad un altro controllo :-D
Procediamo con il creare un ciclo infinito ( ricordate ? :-P)

CODICE
While 1


WEnd



Poi utilizziamo la funzione GUIGetMsg(), che rileva qualsiasi "cambiamento" all'interno della GUI e possibili Value di ritorno dai controlli. Dichiariamo il risultato in una Variabile :



CODICE
While 1
 $nMsg = GUIGetMsg ()

WEnd



Creiamo dunque un controllo Switch sulla variabile $nMsg (che equivarrà al controllo che ha restituito una value) e confrontiamolo con i nostri, in questo caso, tasti.

Impostiamo così il codice :

CODICE
While 1
 $nMsg = GUIGetMsg ()
 Switch $nMsg
    Case $button
       Msgbox (0, "Uao !", "Complimenti ! Ha funzionato :-D")  
 EndSwitch
WEnd


Concludiamo dunque con una precisazione.
In AutoIt vengono attribuiti dei valori particolari ai tasti per ridimensionare, minimizzare e chiudere la finestra.
Questi necessitano dell'#include <guiconstants.au3> per essere utilizzati e possono essere considerati semplici tasti.


$GUI_EVENT_CLOSE = Il tasto di chiusura della GUI (la X rossa in alto a destra :-D).
$GUI_EVENT_MINIMIZE = Il tasto per minimizzare la GUI.
$GUI_EVENT_RESTORE = Il Click sulla Barra di Windows per ripristinare una GUI minimizzata.
$GUI_EVENT_MAXIMIZE = Il tasto per massimizzare la finestra.

Il codice completo, dunque, sarà questo.

CODICE
While 1
 $nMsg = GUIGetMsg ()
 Switch $nMsg
    Case $GUI_EVENT_CLOSE
       Exit
    Case $button
       Msgbox (0, "Uao !", "Complimenti ! Ha funzionato :-D")  
 EndSwitch
WEnd



_______________________________________________________________
PROSSIMO ARGOMENTO : INTERAZIONE ED EVENTI TASTIERA._______

----Eventi Tastiera--

Con Autoit è possibile, attraverso alcuni comandi, simulare attività umane come la pressione dei tasti, il movimento del Mouse, etc..

In questo caso, il primo comando che prenderemo in considerazione è Send()

Secondo Parametro di Send impostato a 1 : I caratteri verranno inviati come sono scritti.

CODICE
Send ("asd!°°#a(/")


Output : "asd!°°#a(/"

--

Secondo Parametro di Send impostato a 0 (Default) : Tutti i caratteri verranno inviati come sono scritti, tranne:

! = ALT
+ = SHIFT
^ = CTRL
# = WIN


.. ed altre combinazioni per “tasti speciali”.


CODICE
Send("^!x")


Output : CTRL+ALT+X

Utilizzando l'Help Ufficiale si possono trovare tutte le combinazioni “speciali”.


Istruzioni Particolari :

CODICE
Send ("{A 4}")


Invia “A” 4 volte.


CODICE
Send("{a down}")


Il tasto “a” viene tenuto premuto finchè non entra in gioco il comando ..


CODICE
Send("{a up}")


.. che rilascerà il tasto “a”.

Guida made by Danyez from HackShare.
 
Top
0 replies since 26/2/2010, 19:34   16 views
  Share