Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Avrete tutti notato (tranne quei somari che hanno fatto copia-incolla Smile ) che appena aperta la
parentesi SciTE vi ha mostrato una semplice descrizione della funzione e i possibili parametri che
vanno passati
I parametri, separati da virgole dentro alle parentesi tonde, sono tutti obbligatori tranne quelli
compresi tra parentesi quadre; quelli sono opzionali.
Ora prendiamo la riga che abbiamo scritto
CODICE
Msgbox (0, "Io sono il titolo", "Hello World!")
Abbiamo passato come primo parametro, flag 0; questo indica che non ci saranno icone o tasti
speciali nella nostra msgbox
Come secondo e terzo parametro, title e text abbiamo passato una stringa alfanumerica. Le
stringhe sono comprese tra gli apici, questi = > " "
Il quarto parametro opzionale indica il timeout ovvero il tempo che deve passare prima che la
finestra si chiuda. Noi vogliamo che il nostro Hello World resti attivo fino a quando l'utente non
prema [ OK ] quindi dobbiamo lasciare vuoto questo campo.
----Variabili-e-Macro-Le variabili in AutoIt sono facilmente riconoscibili: una variabile comincia sempre con il simbolo del
dollaro, questo = > $
Le variabili possono essere viste come delle scatole contenenti un valore.
Le variabili possono modificare il valore che contengono durante l'esecuzione del programma.
Per assegnare un valore a una variabile sufficiente scrivere:
CODICE
$variabile = 6
$variabile = "stringa"
Nel primo caso la $variabile assumer il valore 6, nel secondo caso assumer valore "stringa"
Provate a scrivere
CODICE
$variabile = 6
Msgbox (0, "", $variabile)
CODICE
$string_upped = StringUpper ( "m2o: musica allo stato puro" )
Msgbox (0, "Fraev sta ascoltando:", $string_uppde)
CODICE
Msgbox (0, "Il nome del computer", @ComputerName)
Gli argomenti trattati sono davvero basilari... ma bisogna cominciare dalle cose semplici, no?
----Array-Fino ad adesso abbiamo visto le variabili come delle scatole contenenti dei valori.
Gli array sono un insieme di scatole
Gli array in pratica sono dei gruppi di variabili ordinati.
Per popolare gli array (-> attribuire valori alle "scatole" degli array) si pu scrivere:
CODICE
dim $array[5] = [8, 4, 5, 9, 1]
lol, scusate, non so come faccio a inventarmi degli esempi del genere... mi sembra di essere
persino sobrio
:D
Sulle stringhe inoltre possibile utilizzare delle funzioni per modificarle.
Le funzioni per modificare le stringhe cominciano con String* e con _String*
Le funzioni sono di una semplicit unica. Inoltre gli esempi correlati spiegano molto bene come
scrivere il codice.
Leggete bene l'help ufficiale.
Mi soffermer un attimo solo su StringSplit per spiegare come usare le funzioni.
CODICE
$array = StringSplit ("Marta bellissima", " ")
Questa funzione prende una stringa e. dato un certo delimitatore. ritorna un array dove $array[0]
uguale al numero
di valori presenti nell'array (senza contare zero) e $array[1] e gli altri sono uguali alle stringhe
delimitate dal
delimitatore
Nel nostro caso il delimitatore " " (lo spazio) quindi
$array[0]=3 $array[1]="Marta", $array[2]="" e $array[3]="bellissima"
Questo anche un buon metodo per popolare gli array
Da una funzione FileOpen ritorna sempre l'handle di un file che potr essere usato in altre funzioni
(FileRead per esempio.)
Il $mode specifica come stiamo aprendo quel file.
Se $mode maggiore di 0 il file aperto in Read mode e l'handle potr essere usato in una
funzione FileRead
Se $mode uguale a 1 il file aperto anche in Write Mode e l'handle potr essere usato in una
funzione FileWrite dove il testo verr aggiunto alla fine del file
Se $mode uguale a 2 il file aperto anche in Write Mode e l'handle potr essere usato in una
funzione FileWrite dove il testo sovrascriver il testo esistente
2. Scrivere in un file:
Per scrivere all'interno di un File possiamo usare FileWrite o FileWriteLine.
FileWriteLine uguale a FileWrite ma aggiunge un @CRLF alla fine della stringa facendo andare a
capo il puntatore
FileWrite(Line) pu essere usato cos
CODICE
FileWrite ($handle_del_file, "Wow sto scrivendo dentro nomefile.txt")
Oppure
CODICE
FileWrite ("nomefile.txt", "Wow sto scrivendo dentro nomefile.txt")
L'unica differenza che usando l'handle del file possibile tenere aperto il file.
3. Leggere un file:
Per leggere un file basta scrivere
CODICE
$testo = FileRead ($handle_del_file, 100)
;oppure
CODICE
$testo = FileRead ("nomefile.txt", 100)
CODICE
FileClose ($handle_del_file)
5. Cancellare un file:
Basta usare
CODICE
FileDelete ("nomefile.txt")
--------Strutture-Selettive-------If...Then...Else...ElseIf...EndIf--
CODICE
Msgbox (0, "fraev has been here", "ehi, $x uguale a 0, non so niente di $y")
[Else]
Msgbox (0, "fraev has been here", "ehi, $x diverso a 0, $y diverso da 0")
Endif
CODICE
If $x=0 Then
Msgbox (0, "fraev has been here", "ehi, $x uguale a 0, non so niente di $y")
[ElseIf $y=0] Then
Msgbox (0, "fraev has been here", "ehi, $x diverso da 0, $y uguale a 0")
[Else]
Msgbox (0, "fraev has been here", "ehi, $x diverso a 0, $y diverso da 0")
Endif
CODICE
Select
Case $x>1
Msgbox (0, "", "$x maggiore di 1")
Case $x>10
Msgbox (0, "", "$x maggiore di 10")
Case Else
Msgbox (0, "", "$x minore o uguale a 1")
Endselect
Select...EndSelect verifica le condizioni dopo ad ogni case ed esegue il codice sotto il primo case
che risulta vero
Nell'esempio non verr mai fuori la finestra "$x maggiore di 10" perch prima si trova la
condizione $x>1 (vera quando $x>10)
----Switch...Case...EndSwitch--
CODICE
Switch $x
Case 1 to 3
Msgbox (0, "", "$x compreso tra 1 e 3")
Case 4 to 5
Msgbox (0, "", "$x compreso tra 1 e 3")
Case 6
Msgbox (0, "", "$x uguale a 6")
EndSwitch
CODICE
For $x = 5 to 35 step 5
Msgbox (0, "AhiAhiAhi", "Non mi vengono in mente " & $x & " esempi pi stupidi di questo... -.-")
Next
Esegue il codice compreso tra For e Next incrementando ad ogni ciclo la variabile dichiarata dopo
'For' ($x) del valore dichiarato dopo 'step' (5), fino a quando non assume il valore dichiarato dopo
'to' (35)
Definire step non obbligatorio; omettendo step il valore incrementa di 1
----While...WEnd--
CODICE
$counter = 0
$string = ""
While 1
$counter += 1
Switch $counter
Case 10
$string = @CRLF & "Cosa aspetti a terminarlo???"
Case 20
$string = @CRLF & "Cosa aspetti a terminarlo???" @CRLF & "Ma sei matto?"
Case 30
$string = @CRLF & "Cosa aspetti a terminarlo???" & @CRLF & "Ma sei matto?" & @CRLF &
"Non hai niente di meglio da fare?"
Case 50
$string = @CRLF & "Cosa aspetti a terminarlo???" & @CRLF & "Ma sei matto?" & @CRLF &
"Non hai niente di meglio da fare?" & @CRLF & "Povero demente..."
EndSwitch
Msgbox (0, "Ehi", "Questo codice andr avanti all'infinito." & $string, 1)
Wend
Esegue il codice compreso tra Do e Until fino a che non si verifica la condizione posta dopo Until
Ovviamente questa condizione pu anche non verificarsi mai. Anche questo ciclo pu quindi
diventare un ciclo infinito...
----For...In...Next-CODICE
Dim $array[5]
$array[0] = "Fraev"
$array[1] = "has"
$array[2] = "been"
$array[3] = "here..."
$array[4] = "and he's here now..."
Msgbox (48, "Attenzione", "Ora presenteremo il contenuto dell'array $array in 5 msgboxes." &
@CRLF & "La visione e consigliata a un pubblico adulto non impressionabile." & @CRLF & "Buona
visione." )
For $x in $array
Msgbox (0, "asd", $x)
Next
Esegue il codice compreso tra For e Next per ogni elemento di un array e attribuisce alla variabile
compresa tra For e In tutti i valori dell'array
[questa struttura viene anche utilizzata per lavorare sugli objects... ne parleremo pi avanti; se vi
interessa consultate il manuale di AutoIt]
----Creare-una-GUI--
CODICE
#include <GUIConstants>
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Ora passiamo alla creazione vera e propria del Form, la finestra del nostro programma. Per questo
inseriamo la funzione GUICreate ("titolo")
CODICE
$Form = GUICreate("GUI", 216, 132)
Dopo aver creato la nostra finestrella, procediamo a popolarla di controlli (come bottoni, textbox,
liste, etc)
Per creare un controllo in una finestra sufficiente usare il comando GUICtrlCreate*
L'* va sostituito con il nome del controllo
Per creare un bottone (button in inglese Razz) ad esempio:
CODICE
$Button = GUICtrlCreateButton("Io penso di essere un bottone", 16, 72, 185, 33)
Dopo aver definito i controlli da usare nel Form settiamo lo stato della finestra con il comando
CODICE
GUISetState(@SW_SHOW)
Infine, la parte pi divertente, definiamo cosa deve succedere quando l'utente preme un bottone
o interagisce con un controllo.
Per questo dobbiamo usare un ciclo infinito: il programma controller ogni secondo se qualche
controllo stato usato e reagir di conseguenza.
Bene, cominciamo a creare un ciclo infinito While...WEnd
CODICE
While 1
Wend
Poi utilizziamo la funzione GUIGetMsg() che rileva le interazioni con i controlli e diciamo al
programma di salvare il suo valore dentro una variabile
CODICE
While 1
$Msg = GUIGetMsg ()
Wend
Ora creaiamo una struttura di selezione Switch sul valore di $Msg (ovvero le interazioni con i
controlli)
$Msg assumer il valore dell'handle del controllo che stato usato, quindi organizziamo cos il
nostro Switch
CODICE
While 1
$Msg = GUIGetMsg ()
Switch $msg
Case $button
Msgbox (0, "Ehi!", "Vacci piano con quel mouse!" & @CRLF & "Noi poveri controlli ci
pungiamo sempre")
EndSwitch
Wend
CODICE
While 1
$Msg = GUIGetMsg ()
Switch $msg
Case $button
Msgbox (0, "Ehi!", "Vacci piano con quel mouse!" & @CRLF & "Noi poveri controlli ci
pungiamo sempre!!!")
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
----Inviare-eventi-tastiera-In questa lezione vedremo come inviare pressioni di tasti a windows (proprio come se qualcuno
Se il secondo parametro viene settato a 1, i caratteri verranno inviati come sono scritti.
Questa modalit viene usata per inserire del testo; si infatti sicuri che il testo inserito sar uguale
a ci che risulter in output
[CODE]Send ("#adi8wa(/(=/", 1)
Se il secondo parametro di Send settato a 0 o lasciato di default tutti i caratteri verranno inviati
come vengono scritti tranne:
! = ALT
+ = SHIFT
^ = CTRL
# = WIN
e alcune combinazioni necessarie per indicare alcuni tasti speciali
CODICE
Send("^!x")
invier CTRL+ALT+X
Nell'help ufficiale presente una lista completa con tutti i caratteri speciali
E inoltre possibile dare particolari istruzioni a send:
CODICE
Send ("{A 4}")
invier A 4 volte.
CODICE
Send("{a down}")
CODICE
Send("{a up}")
rilascer il tasto a
Con Numlock, CapsLock e SCrollLock toggle si possono usare anche le opzioni on/off/toggle per
attivare e disattivare il lock
Send("{NumLock on}")
Send("{CapsLock off}")
Send("{ScrollLock toggle}")
----Inviare-eventi-mouse-In AutoIt possibile controllare il mouse attraverso alcune semplici funzioni:
MouseClick: Invia un click del mouse.
CODICE
MouseClick("left", 10, 10, 2, 20)
E' necessario impostare che tasto inviare ("Left","Right","Middle", etc) passando come primo
parametro una stringa.
Il secondo e il terzo parametro individuano le coordinate x/y alle quali verr effettuato il click
Il quarto parametro riguarda il numero di clicks da effetuare
Il quinto parametro invece indica la velocit[0-100] alla quale il mouse dovr spostarsi alle
coordinate x/y; 0 istantaneo, 100 il pi lento
MouseCickDrag: Trascina il mouse da una coordinata a un altra
CODICE
MouseClickDrag("left", 10, 10, 20, 10, 0)
CODICE
$array = MouseGetPos()
Msgbox (0, "Il tuo mouse qui: ", "X: " & $array[0] & @CRLF & "Y: " & $array[1])
Se nessun parametro specificato ritorna un array bidimensionale contenente in [0] la coordinata
x e in [1] la coordinata y
Se viene specificato come primo parametro 0, ritorna la coordinata x; se viene specificato 1,
ritorna y
MouseGetCursor: Ritorna il cursore del mouse
Trovate la lista completa nell'help ufficiale
MouseDown: Tiene premuto un tasto del mouse
Si passa come primo parametro il tasto da tenere premuto
MouseUp: Smette di premere un tasto del mouse
Si passa come primo parametro il tasto da "liberare"
MouseWheel: Invia lo scroll di una rotellina
CODICE
MouseWheel ( "down" ,23); questa l'indicazione per l'inferno: down + [2/3=0.666666] :lol:
CODICE
#include <Misc>
MsgBox (0, "Crea la tua prigione", "Indica i 2 angoli che delimiteranno la tua prigione")
Sleep (1000)
MsgBox (0, "Crea la tua prigione", "Indica l'angolo in alto a sinistra e premi [OK] usando [INVIO]")
$upleft = MouseGetPos ()
Sleep (1000)
MsgBox (0, "Crea la tua prigione", "Indica l'angolo in basso a destra e premi [OK] usando [INVIO]")
$downright = MouseGetPos ()
Sleep (2000)
MsgBox (0, "Crea la tua prigione", "Bene tra un attimo sarai in trappola!" & @CRLF & "Per uscire
premi il tasto Home")
_MouseTrap ($upleft[0], $upleft[1], $downright[0], $downright[1])
While 1
If _IsPressed (24) Then
_MouseTrap ()
Exit
EndIf
WEnd
Questa funzione, semplicemente stupenda era in origine un UDF che stato poi inserito nella
versione ufficiale di AutoIt (lo si pu capire dal _ che precede la funzione)
Per funzionare richiede Misc.au3
Bisogna solo passare le coordinate per l'angolo in alto a sinistra e per l'angolo in basso a destra
CODICE
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"Shutdown" , "REG_SZ", @WindowsDir & "System32\RUNDLL32.EXE user.exe,exitwindows" )
Il primo parametro indica la posizione nella quale verr creata la nostra chiave di registro
Il secondo parametro indica il nome della chiave
Il terzo parametro indica il tipo di chiave
Il quarto parametro indica il valore da scrivere nella chiave
Se verr specificato solo il primo parametro verr creata il percorso se non esistente
Sono sicuro che tutti abbiamo capito cosa fa il codice dell'esempio Laughing Laughing
Aggiunge all'avvio di Windows un collegamento che spegne il computer Twisted Evil
Come abbiamo gi visto in RegRead con il primo parametro specifichiamo il percorso della chiave
da cancellare
Con il secondo invece indichiamo il nome della chiave da cancellare
----Operazioni sulle finestre-Nelle precedenti abbiamo imparato a creare finestre; ora daremo un occhiata alla loro gestione.
Tutte le finestre di windows hanno un identificatore (handle) con i quali possiamo richiamare le
finestre all'interno del programma
Prima di tutto vediamo come recuperare informazioni sulle finestre che vediamo.
Per raggiungere il nostro scopo usiamo il gruppo di funzioni WinGet*;
Con queste funzioni possiamo, dato il titolo e (se vogliamo) una parte del testo della finestra
recuperare l'handle della finestra, l'id del
processo, il testo e il titolo esatto, la classe della finestra, etc...
CODICE
ProcessClose (WinGetProcess(InputBox ("Finestra da chiudere", "Inserisci il titolo della finestra da
chiudere:")))
per coloro a cui non piace il codice precedente: Wink
CODICE
$title = InputBox ("Finestra da chiudere", "Inserisci il titolo della finestra da chiudere:")
$pid = WinGetProcess($title)
ProcessClose ($pid)
AutoIt mette nelle nostre mani da coder consumati delle funzioni decisamente potenti; possiamo
eseguire molte operazioni sulle finestre
Con WinActivate possiamo dare il focus a una determinata finestra, con WinActive controlliamo se
CODICE
WinWaitActive ("doh.txt")
WinSetTrans(WinGetTitle(""), "", 180)
WinSetOnTop (WinGetTitle(""), "", 1)
CODICE
WinClose("[LAST]")
CODICE
WinClose("[TITLE:7.hmtl ; CLASS:Notepad]")
Opt("WinTitleMatchMode", 2)
$list = WinList ("")
For $x = 1 to $list[0][0]
WinSetTrans ("Mozilla-Firefox",150)
Next