AutoIt ist eine Software zur Erstellung von Makros, mit denen Abläufe unter Microsoft Windows automatisiert werden können. AutoIt ist Freeware und läuft unter NT, 2000, XP und Vista. Das Programm stellt dem Nutzer eine BASIC-ähnliche Scriptsprache zur Verfügung. Außerdem enthält es einen Interpreter und einen Compiler, mit dem ausführbare Dateien (exe-Dateien) erstellt werden können; damit können AutoIt-Scripte auch auf Computern ausgeführt werden, auf denen AutoIt nicht installiert ist.
Solltet ihr noch kein Autoit haben, ladet es euch bei Autoitscript.com runter, oder geht auf diesem Link um direkt auf die Download-Page zu gelangen, dort findet ihr zahlreiche Downloads für Autoit, Tools & den Scite-Editor.
Die Full-Installation (volle Installation von Autoit, inklusive dem Scite-Editor) installiert Autoit und alles was man für das programmieren braucht. Ich rate euch anschließend Scite nochmal alleine zu downloaden, weil dieser Download auch noch Tools beinhaltet (u.a. Koda oder Tidy Autoit Source (säubert das Script für eine bessere Lesbarkeit)).
Habt ihr die Installation von Autoit und Scite abgeschlossen, könnt ihr letztendlich mit dem programmieren in Autoit beginnen!
Wie erstelle ich ein Autoit Script?
Klickt rechts auf eurem Desktop oder in einem Ordner und bewegt euren Mauszeiger über "Neu", dann wählt ihr Autoit-v3-Script aus und es erscheint eine .au3 Datei die ihr anschließend mit einem Rechtsklick und Edit Script öffnen könnt.
Was ist wenn ich mal nicht weiter weiß?
Zuerst die Hilfe benutzen, solltet ihr euch im Scite-Editor befinden drückt einfach die F1-Taste und die Hilfe erscheint, jetzt nur noch im Index den Befehl eingeben, wo ihr euch nicht sicher seit wie ihr ihn benutzt und die Erklärung erscheint dann!
Für die, die nicht grade die Meister in Englisch sind, empfehle ich euch die deutsche Hilfe zu downloaden, die findet ihr auf Autoit.de!
Flag:
Die Flag ist der ?Style" der Box, ob er als Fehlermeldung oder als Info Box erscheinen soll.
Title:
Der Titel der Box.
Text:
Der Inhalt der Box.
[timeout]:
Wie lange die Box dar sein soll, Zeit in Sekunden.
[hwnd]:
Das Fenster Handle welches als Parent für diesen Dialog verwendet werden soll.
Hier ist ein einfacher Script:
AutoIt-Quelltext
MsgBox(64, "Test", "Diese Box wird sich in 10 Sekunden selbst schließen", 10)
MsgBox(64,"Test","Diese Box wird sich in 10 Sekunden selbst schließen",10)
Die Box wird als Info Box dargestellt [Flag = 64], der Titel ist "Test", der Text ist "Diese Box wird sich in 10 Sekunden selbst schließen" und 10 bedeutet das die Box sich in 10 Sekunden schließt.
Key:
Die Taste, die gedrückt werden muss um die Funktion / den Befehl auszuführen.
[function]:
Die Funktion, der sagt was der Befehl machen soll.
Hier ist ein einfacher Script:
AutoIt-Quelltext
; Drücke Esc um das Script zu beenden, Pause um es zu pausieren
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d
;;;; Hier ist der Hauptteil des Programms ;;;;
While 1
Sleep(100)
WEnd
;;;;;;;;
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script ist pausiert',0,0)
WEnd
ToolTip("")
EndFunc
Func Terminate()
Exit 0
EndFunc
Func ShowMessage()
MsgBox(4096,"","Das ist eine Nachricht.")
EndFunc
; Drücke Esc um das Script zu beenden, Pause um es zu pausieren
$Variabel=InputBox("title","Prompt"[,"Default"[,"password char"[, width, height [, left, top [, timeOut [,hwnd]]]]]])
Title:
Titel der EingabeBox.
Prompt:
Anweisung der EingabeBox.
Default:
Der in der Eingabe-Box vorgegebene Wert.
Password Char:
Buchstabe oder Zahl die, was in der Box geschrieben worden ist ersetzt, in der Wirklichkeit entspricht das was ihr geschrieben habt der Realität.
[width, hight, left, top]:
Wie Groß die Box ist.
[timeout]:
Wie lange die InputBox dar sein soll.
[hwnd]:
Das Fenster Handle welches als Parent für diesen Dialog verwendet werden soll.
Hier mal ein Script:
AutoIt-Quelltext
$Variabel = InputBox("Befragung", "Schreibe hier dein Vornamen hinein:")
MsgBox(0, "Vorname", "Dein Vorname ist " & $Variabel)
$Variabel=InputBox("Befragung","Schreibe hier dein Vornamen hinein:")
Wir werden jetzt mal ein bisschen PixelSearch betreiben und gleichzeitig mit dem MouseMove-Befehl herumspielen!
PixelSearch ist eine Funktion um eine Stelle auf eurem Desktop zu suchen und wenn eine Variabel damit definiert wird dann kann man auch damit MouseMove und MouseClick betreiben.
left, top, right, bottom:
Die 4 Begrenzungen.
Au3 Erklärung:
Die finden wir einfach raus wenn wir in das Spiel "CurveBall" das Spielfeld ausmessen, man freezt die Info und geht mit dem Finder Tool an die linke obere Ecke im Spielfeld und wenn man jetzt in den Tab "Mouse" wechselt kommen auch bei der Position auch schon left, top raus.
Das gleiche noch mal rechts unten des Spielfelds, wieder das Finder Tool nehmen und messen, dann kopiert man bei Position die 2 Werte und man hat right, bottom raus.
colour:
Heisst ja bekanntlich Farbe, der Farbcode der im Pixel gesucht werden soll.
Au3 Erklärung:
Man geht mit dem gefrozzten Au3 Window info mit dem Finder Tool über dem Ball im Spiel CurveBall und man bekommt über den Tab "Mouse" auch schon die Farbe für den Pixel heraus, den kopiert man und man hat die Farbe.
[shade-variation]:
Eine Zahl zwischen 0 und 255, die die Anzahl erlaubter Schattierungsschwankungen der Rot-, Grün- und Blaukomponenten festlegt. Standard ist 0 (exakte Übereinstimmung).
[step]:
Anstatt jedes Pixel in die Prüfsumme einzubeziehen, kann man einen Wert größer als 1 verwenden um Pixel zu überspringen (schneller). z.B. wird ein Wert von 2 nur jedes zweite Pixel prüfen. Standard ist 1.
Jetzt wollen wir ein MouseMove machen, sodass er die Kugel auch immer verfolgt, aber bevor wir das machen müssen wir die Variabel in ein Array umwandeln:
AutoIt-Quelltext
While True
$PixelSearch = PixelSearch(117, 312, 584, 623, 0xC4FFB6)
If IsArray($PixelSearch) = True Then
WEnd
So, jetzt verfolgt die Maus den Ball mit maximaler Geschwindigkeit, ihr könnt natürlich auch HotKeys einfügen, guckt aber dafür unter die Rubrik: Hotkeys einfügen
IniWrite("Meine erste Ini.ini", "Sektion", "Schlüssel", "Wert")
IniWrite("Meine erste Ini.ini","Sektion","Schlüssel","Wert")
Section:
Wie eine Kategorie in einem Buch.
Key:
Der Name des Schlüssels in der .ini-Datei.
Value:
Der zu schreibende/ändernde Wert.
So, der Befehl macht eine .Ini in dem Verzeichnis wo euer Script gestarten worden ist mit den Daten, die könnt ihr natürlich auch umschreiben.
Natürlich könnt ihr auch eine InputBox machen und dies eine Variabel zuordnen und die in dem IniWrite Befehl unter der gewünschten Stelle einfügen.
Jetzt kommt der IniRead Befehl:
Dieser liest das was in der .Ini drin ist.
Wenn wir zum Beispiel unsern Script auslesen wollen und ihn als MsgBox dann zeigen wollen machen wir einfach den Befehl IniRead eine Variabel zuordnen:
AutoIt-Quelltext
IniWrite("Meine erste Ini.ini", "Sektion", "Schlüssel", "Wert")
$Variabel = IniRead("Meine erste Ini.ini", "Sektion", "Schlüssel", "Wert wurde nicht gefunden")
MsgBox(0, "Ini.ini", $Variabel)
IniWrite("Meine erste Ini.ini","Sektion","Schlüssel","Wert")
$Variabel=IniRead("Meine erste Ini.ini","Sektion","Schlüssel","Wert wurde nicht gefunden")
Die _IE Funktionen von AutoIt sind sehr hilfreich um zum Beispiel ein Einlogg Bot zu erstellen!
Wir fangen mal an ein Einlogg Bot für AutoIt Bot zu erstellen:
Zunächst muss der Bot den Internet Explorer öffnen, den Befehl ordnen wir noch eine Variabel zu, das brauchen wir nähmlich für später, aber zunächst müssen wir noch IE.au3 includen damit wir überhaupt diese Befehle nutzen können!
Das sind dann so aus:
So das haben wir, jetzt müssen wir den Layer herausfinden damit er überhaupt was schreibt, ihr müsst einfach raten um den Layer herauszufinden, fangt von der Zahl "0" an und immer höher bis irgendwas eingegeben kommt:
So, jetzt kommen wir auch zum eigentlichen:
Damit er überhaupt was schreibt braucht er ja den Layer und die ID, den finden wir im Quelltext, sucht einfach nach "loginUsername" und "loginPassword"!
Jetzt machen wir wieder eine neue Variabel die heisst:
$Username2
Und der ordnen wir den Befehl "_IEFormElementGetObjByName" zu, dann wüsste er eigentlich auch was er wo hinschreibt.
Arrays sind Variablen die mehr als einmal beschrieben worden sind, diese werden oft für For...To...Next Schleifen benutzt. Um die verschiedenen ?Datenfelder", sowie ich sie nenne zusehen, müsst ihr einfach die Array.au3 includen und _ArrayDisplay eingeben.
Um ein Array zuerstellen könnt ihr verschiedene Methoden befolgen:
Alles einzeln machen
Alles sofort beschreiben
Hier wird es erklärt:
AutoIt-Quelltext
;Alles einzeln machen:
#include <Array.au3>
Global $ArrayEinzeln[2]
$ArrayEinzeln[0] = "Hallo" ; Das erste ?Datenfeld" ist immer die Null
$ArrayEinzeln[1] = "Wie gehts?" ; Das zweite ?Datenfeld" ist immer die Eins
; Das letzte ?Datenfeld" ist das Array[2] - 1 nehmen = Eins
For $Array = 0 To 1
MsgBox(0, "Array Tutorial", "Dies ist der Array " & $Array & ": " & $ArrayEinzeln[$Array])
Next
;Alles auf einmal:
Global $ArrayAlles[3] = ["Hallo, wie gehts?", "So geht alles", "auf einmal wenn man ein Array beschreibt"]
For $Array = 0 To 2 ; Diesmal 0 zur 2 weil 3 - 1 gleich 2 ist
MsgBox(0, "Array Tutorial", "Dies ist der Array " & $Array & ": " & $ArrayAlles[$Array])
Next
_ArrayDisplay($ArrayAlles, "Array Tutorial")
So, natürlich können wir auch UBound benutzen bei der For...To...Next Schleife, UBound gibt die Dimensionen eines Arrays zurück, $Array[1][2] hat 2 Dimensionen und zwar die [1] und die [2], wollen wir jetzt mit UBound die Zweite auswählen machen wir einfach UBound($Array, 2). Hier ist ein Beispiel, leider haben die Arrays keine Dimensionen bzw. haben nur eine:
AutoIt-Quelltext
Global $Array[3] = ["Erster Array", "Zweiter Array", "Dritter Array"] ; Wenn Array[3][4] angegeben wird, ist die [3]
; die erste Dimension und die [4] die zweite Dimension
For $UBound = 0 To UBound($Array) - 1 ; Die erste Dimension und auch die einzige Dimension des Arrays $Array wird
; durchlaufen
MsgBox(0, "UBound Test", "Hallo, dies ist ein Text für die UBound Erklärung: " & $Array[$UBound])
; ?Datenfelder" von $Array werden durchlaufen, Ergebniss sind die ?Datenfelder" in der MsgBox
Next
;Andere Möglichkeit
Global $Array2[3] = ["Erster Array", "Zweiter Array", "Dritter Array"]
For $Other = 0 To 2 ; Diesmal wird nicht UBound benutzt sondern werden die Datenfelder 0 (1) bis 3 (2) durchlaufen
MsgBox(0, "UBound Test", "Hallo, dies ist ein Text für die UBound Erklärung: " & $Array2[$Other])
Next
Global$Array[3]=["Erster Array","Zweiter Array","Dritter Array"]; Wenn Array[3][4] angegeben wird, ist die [3]
; die erste Dimension und die [4] die zweite Dimension
For$UBound=0ToUBound($Array)-1; Die erste Dimension und auch die einzige Dimension des Arrays $Array wird
; durchlaufen
MsgBox(0,"UBound Test","Hallo, dies ist ein Text für die UBound Erklärung: "&$Array[$UBound])
; ?Datenfelder" von $Array werden durchlaufen, Ergebniss sind die ?Datenfelder" in der MsgBox
Also, jetzt werde ich euch erklären wie ihr in eurer GUI ein Hintergrundbild macht, ihr macht euch erstmal eure GUI, ich nehme als Beispiel mein SpamBot, bei dem werden wir noch bei der GUI eine neue Variable zuordnen, die kann heissen ?$Pic1", diese wird mit GUICtrlCreatePic definiert!
So, wenn wir das gemacht haben, machen wir die Klammer auf und füllen die Parameter aus:
Filename:
Der Pfad des Bildes, das in der GUI als Hintergrundbild angezeigt werden soll.
left, top, width, height:
Die Größe des Bildes, mein Vorschläg wäre das wir es so groß machen wie die GUI selbst, dazu machen wir einfach bei left und top eine Null und bei width und height 383 und 492, das wäre die Größe unsere GUI, da ja left und top in der GUI 0 und 0 ist und width und height 383 492 [Kann man auch als Auflösung der GUI nennen!], so werde ich es auch machen.
style, exstyle:
Das wird wohl jeden klar sein, was für Optionen dieses Bild liefern soll. Kleiner Tipp am Rande: Nie $SS_NOTHIFY benutzen, den wenn du das benutzt, kann es sein das du nicht mehr die Buttons und anderes in der GUI benutzen kannst.
Wenn wir das ausgefüllt haben, dann sollte unser Script so aussehen:
Wenn ihr das alles befolgt habt, könnt ihr auch eine GUI erstellen mit einem schönen Hintergrund, das schmückt alles aus und macht dann auch Freude es zubenutzen!
Die Operatoren sind das wichtigste was man zur Variablendefinition braucht. Um einer Variable etwas zuweisen zukönnen wird z.B. der '=' (Zuweisungs-Operator) gebraucht!
Dieser wird z.B. so benutzt bei einer Variable, wer sich das Tutorial schon richtig angesehen hat, wird wohl wissen was die einzelnen Ausdrücke bedeuten!
Wir haben der Variable '$VariablenDefiniton' mit dem Zuweisungs-Operator die Zahl 18 zugewiesen, dieser wird jetzt im gesamten Script (Global) in die Variable eingespeichert.
Jetzt wollen wir noch eine Zahl dranhängen, stellen wir uns einfach vor, wir können die Variable nicht noch einmal definieren!
Da benutzen wir einfach den '&='(Verkettung und Zuweisungs-Operator), der hängt an der gespeicherten Variable das gewünschte noch dran!
So sieht es aus, wenn wir den Verkettung und Zuweisungs-Operator benutzen:
AutoIt-Quelltext
Global $VariablenDefiniton = 18
$VariablenDefiniton &= 2
Die Zahl wird nicht mehr mit 18 in die Variable eingespeichert, sondern mit 182, weil die 2 an der vorherigen Variablendefinition drangehängt worden ist!
Sowas ist relativ ratsam bei IniRead und FileRead Befehlen, wenn man noch was in einer Datei / Ini dranhängen will.
Der '+=' (Addition und Zuweisungs-Operator) dient dazu eine Zahl die angegeben worden ist plus die Zahl der Variable zuaddieren. Es gibt 2 Wege hier (die gehen auch bei den anderen):
1.Weg (Zeitaufwändiger):
AutoIt-Quelltext
$VariablenDefiniton = $VariablenDefiniton + 10
$VariablenDefiniton=$VariablenDefiniton+10
2. Weg(Zeitsparender durch den Operator):
AutoIt-Quelltext
$VariablenDefiniton += 10
$VariablenDefiniton+=10
Natürlich wäre es hier ratsam den 2. Weg zufolgen!
Unteranderem gibt es noch anstatt '+=':
-= : Subtraktion und Zuweisungs-Operator
/= : Division und Zuweisungs-Operator
*= : Multiplikation und Zuweisungs-Operator
Diese Operatoren werden oft für die Variablendefinition gebraucht!
Natürlich kann man auch vom Variablen weg ableiten und alles manuell machen, z.B. man addiert etwas und lässt es in einer Nachrichtenbox ausgeben:
Noch etwas in Autoit sind die logischen Operatoren.
Diese werden oft bei Schleifen-Anfängen und If-Abfragen benutzt, wie z.B. der Operator 'And', wer jetzt englisch kann, weiß das 'And' auf Deutsch 'Und' heißt.
Man könnte z.B. den 'And' Operator in diesem Beispiel benutzen:
AutoIt-Quelltext
If 5 + 10 And 10 + 5 = 15 Then
MsgBox(0, "Addieren", "15")
EndIf
Wenn beide Ausdrücke wahr sind, wird die Nachrichtenbox ausgeführt mit dem Ergebnis von 5 + 10 bzw. 10 + 5 !
Dann gibt es den logischen Operator 'Or' (deutsch = oder), der bezieht sich in einer If-Abfrage darauf, wenn eines der beiden Ausdrücke wahr sind das dann das passiert was in der If-Abfrage angegeben ist im Then-Teil.
So könnte es z.B. aussehen:
AutoIt-Quelltext
If 5 + 10 Or 17 + 5 = 15 Then
MsgBox(0, "Addieren", "15")
EndIf
Dann gibt es noch die <> (Größer - kleiner Operatoren), da kann das '=' Operator durch diese ersetzt werden, wenn z.B. etwas größer ist, oder wenn z.B. etwas nicht das ist was angegeben ist.
Z.B.:
AutoIt-Quelltext
;Ohne Zeichen
$String = ""
If $String <> "" Then
MsgBox(0, "String", "String beinhaltet Zeichen!")
Else
MsgBox(0, "String", "String beinhaltet keine Zeichen!")
EndIf
; Mit Zeichen
$String = "Tutorial"
If $String <> "" Then
MsgBox(0, "String", "String beinhaltet Zeichen!")
Else
MsgBox(0, "String", "String beinhaltet keine Zeichen!")
EndIf
Man kann schließlich mit den Operatoren variieren und es nach seinen Gunsten einstellen.
Hoffe das ich euch einen "leichten" Teil nochmal erläutert habe, ein paar Operatoren habe ich noch aus der Hilfe rausgesucht, wusste nicht alle auswendig!
Hier nochmal eine Liste aller logischen Operatoren:
Quellcode
;Ohne Zeichen
$String = ""
If $String <> "" Then
MsgBox(0, "String", "String beinhaltet Zeichen!")
Else
MsgBox(0, "String", "String beinhaltet keine Zeichen!")
EndIf
; Mit Zeichen
$String = "Tutorial"
If $String <> "" Then
MsgBox(0, "String", "String beinhaltet Zeichen!")
Else
MsgBox(0, "String", "String beinhaltet keine Zeichen!")
EndIf
Eine Referenz ist ein anderer Name für ein bereits existierendes Objekt. Bei der Definition einer Referenz wird also kein neuer Speicherplatz belegt. Alle Aktionen mit der Referenz werden mit dem Objekt durchgeführt, auf das die Referenz verweist.
Referenzen werden vor allem als Parameter und Return-Wert von Funktionen eingesetzt!
Würden wir also eine Funktion schreiben namens _Verdoppeln und wir verweisen auf den Parameter $iZahl mit der Referenz, werden alle Änderungen auch in der übergebenen Variable durchgeführt.
Anhand dessen Beispieles könnt ihr es euch besser vorstellen:
AutoIt-Quelltext
$Zahl = 5
_Verdoppeln($Zahl) ;Die Variable $Zahl führt jetzt auch die gleichen Durchführungen wie $iZahl durch.
;Somit wird ermöglicht, kein Return-Wert zu setzen.
;Außerdem muss $Zahl nicht mehr neu deklariert werden, z.B. so:
;$Zahl *= 5
;Natürlich könnte man auch am Anfang in der Deklaration $Zahl = 5*5 machen,
;aber es dient lediglich nur zum Beispiel!
MsgBox(0,"Title",$Zahl) ;Schließlich rufen wir mit einer MsgBox das Ergebnis auf!
Func _Verdoppeln(ByRef $iZahl) ;Referenz verweist auf $iZahl
$iZahl = $iZahl * $iZahl ;Wenn $iZahl diese Durchführungen macht, macht $Zahl das auch!
EndFunc
$Zahl=5
_Verdoppeln($Zahl);Die Variable $Zahl führt jetzt auch die gleichen Durchführungen wie $iZahl durch.
;Somit wird ermöglicht, kein Return-Wert zu setzen.
;Außerdem muss $Zahl nicht mehr neu deklariert werden, z.B. so:
;$Zahl *= 5
;Natürlich könnte man auch am Anfang in der Deklaration $Zahl = 5*5 machen,
;aber es dient lediglich nur zum Beispiel!
MsgBox(0,"Title",$Zahl);Schließlich rufen wir mit einer MsgBox das Ergebnis auf!
Func _Verdoppeln(ByRef$iZahl);Referenz verweist auf $iZahl
$iZahl=$iZahl*$iZahl;Wenn $iZahl diese Durchführungen macht, macht $Zahl das auch!
Hier stellt außerdem ByRef eine große Rolle da, die sollte bei einer Funktion immer vor der Parameter-Variable stehen!
Ist zwar nicht so viel, kann aber sehr helfen, wenn man eine UDF schreiben will!
Positiv bewerten , sollte euch das Tutorial gefallen haben
Endlich ist mein Tuturial fertig.
Wenn noch Unklarheiten auf kommen, tut mir leid, das Tuturial ist ein bisschen lang geraten und mit der Zeit hab ich mein Verstand verloren nicht Böse sein, trotzdem mal in der Sufu, Hilfedatei oder Wiki gucken Viel Spass!!!!