[Tut] AutoIt für Anfänger

10/24/2010 14:46 FizzeBu#1
Einführung
So, ich will jetzt auch bei den AutoIt Tutorials mitmischen, es gibt zwar schon viele, aber eben meins noch nicht;D Als erstes will ich den Download, die Installation und die wie man die deutsche Hilfe bekommt.
Wir gehen auf die Seite: [Only registered and activated users can see links. Click Here To Register...]
Als erstes holen wir uns die neueste AutoIt Version:
Dann noch die Vollversion von SciTE:
Nun noch die Deutsche Hilfe Datei: [Only registered and activated users can see links. Click Here To Register...]
Jetzt installieren wir AutoIt und SciTE, das sollte jeder selber hinkriegen. Die Hilfsdatei einfach ersetzen.
So, jetzt haben wir die Grundlage für die Arbeit mit AutoIt geschaffen. Bevor wir aber anfangen, erkläre ich euch, wie ich die folgenden Schritte aufbaue. Als erstes werde ich euch sagen, was wir üerhautpt tun, dann mit welcher Funktion, dann den Code, und dann die Erklärung, falls nötig.

Und dann noch ganz wichtig: Ich habe selber AutoIt durch Tutorials gelernt, das heißt manche Sachen habe ich an einem Vorbild geschrieben. Ich hoffe, alle Leute die sich eventuell wieder erkennen, findens Okay;D

Okay dann bleibt nicht mehr viel zu sagen, ausser, dass ich das Tut erweitern werde, wenn ich mal wieder Zeit hab.
10/24/2010 14:47 FizzeBu#2
1."Hello World"
Unser erstes Skript wird eine "Hello World" MessageBox. Um eine MessaeBox zu erstellen benutzen wir die Funktion MsgBox Jede Funktion hat verschiedene Parameter. Wenn wir uns die MsgBox Funktion in der Hilfe ansehen können wir diese in Erfahrung bringen. In der Hilfe steht:
Code:
MsgBox ( flag, "title", "text" [, timeout [, hwnd]] )
Flag legt die Art des Messagebox fest. Es gibt viele Flags für MessageBoxen, experimentert einfach mal nach Lust und Laune. "title" legt den Titel und "text" legt den Text der Mesagebox fest. Text, oder auch String genannt, wird immer in " " Anführungszeichen gesetzt, so erkennt AutoIt, dass es ein String ist. Allesd was in [ ] Eckigen Klammern steht ist optional und muss nicht angegeben werden.
Code:

Code:
MsgBox(64, "Hello World!", "Das ist eine Hello World Mesagebox mit einem Info-Icon.")
MsgBox(64, "Hello World!", "Das ist die zweite Mesagebox, wir könnten ewig so weitermachen. Aber jetzt lassen wir es lieber.")
Exit
Erklärung:
64 ist die Flag. 64 steht für das Info-Icon. Mann kann verschiedene Flags addieren, indem man sie addiert, 36 zum Beispiel setzt sich aus 4 und 32 zusammen, was für ein Fragezeichen-Icon und Ja-Nein Buttons steht.
Exit beendet das Skript, das muss man zwar nicht machen, mach ich aber trozdem, der Sicherheit wegen, nicht, dass mir irgendein Skript mein Speicher belegt.

MesageBoxen werden benutzt um etwas anzuzeigen, oder um eine Frage zu stellen, eurer Fantasie ist keine Grenzen gesetzt!
10/24/2010 14:49 FizzeBu#3
2.Sleep
In 1. haben wir gelernt eine Mesagebox zu erzeugen. Diesen Befehl benutzen wir dieses mal wieder, aber jetzt pausieren wir das Skript für eine Zeit lang und lassen erst dann die zweite Mesagebox anzeigen. Das machen wir mit Sleep. Sleep hat keine großartigen Parameter, nur delay dort legen wir fest, wie lange das Skript pausiert werden soll.
Code:

Code:
MsgBox(0, "Schritt 1", "Bitte Klick auf Okay")
Sleep(2000)
MsgBox(0, "Schritt 2","Jetzt sind 2 Sekunden um.")
Exit
Erklärung:
Die Zeit für Sleep muss in Milisekunden angegeben werden, das ist nicht wirklich schwierig, man hängt einfach an die gewünschte Sekunenzahl drei Nullen an.

Sleep wird sehr häufig verwendet, zum Beispiel um eine Pause zwischen Angriff- und Pickupaktionen zu haben. Der große Nachteil ist, dass Sleep das ganze Skript pausiert, wenn man komplexere Skripte hat, kann das sehr störend sein.
10/24/2010 14:50 FizzeBu#4
3. Variablen
Variablen sind sehr wichtig im Umgang mit AutoIt, darum bekommen sie auch ein relativ langes Kapitel.
In Variablen kann man grundsätzlich zwei Werte abspeichern: Zahlen und Strings. Das praktische an Variablen ist, dass man ihren Wert beliebig oft verändern kann, man kann Rechnungen ausführen oder Strings erweitern. Variablen haben immer ein $ Dollarzeichen vor dem Namen, so erkennt AutoIt, dass es eine Variable ist. AutoIt achtet auf Groß und Kleinschreibung, also passt auf. Variablen müssen vor der Benutzung deklariert werden, und zwar so:
Code:
$variablenname = WERT
Man kann Variablen wie schon gesagt ändern und das geht so:
Code:
$variablenname = 15 oder
$variablenname = 15 + 2 oder
$variablenname = $anderevariable + 9 oder
$variablenname = +1 (was die Kurzform von $variablennamen = $variablenname + 1 ist) oder
$variablenname = "Mein Text"
Wir kennen schon MesagBoxen. Bisher haben wir einfach darauf gewartet, dass geklickt wird und dann das Skript weiter ausgeführt, aber man will ja zum Beispiel auch Fragen in eine Mesagbox verpacken, aber wie kriegt man raus welcher Button gedrückt wurde? Die Antwort lautet: Variablen. Man deklariert eine Variable, zum Beispiel $yesorno und setzt als Wert die MesageBox ein. Die Variable speichert dann den Rückgabewert der MesageBox ab.
Code:

Code:
$yesorno = MsgBox(36, "Frage", "Ja oder Nein?")
MsgBox(0, "Rückgabewert", "Der Rückgabewert ist " & $yesorno)
Exit
Erklärung:
$yesorno wird in der zweiten Messagebox angezeigt. Das geschieht mit & $yesorno, weil man mit "Der Rückgabewert ist $yesorno" alles anzeigt was in " " Anführungszeichen steht. Das heißt es würde "Der Rückgabewert ist $yesorno" angezeigt wir wollen aber den Rückgabewert zeigen, darum benutzen wir & $variablenname um eine Variable in einem Sring anzuzeigen.
Beispiel an einer Variablen:
Code:
$text1 = "Text 1"
$text2 = "Text 2"
$text1und2 = "Es gibt " & $text1 & " und " & $text2 & "."
MsgBox(0, "Text1und2", $text1und2)
$text1und2 beinhaltet jetzt den String "Es gibt Text 1 und Text 2. " experimentiert einfach mal mit Variablen, ändert Text1 oder Text 2, es gibt schier unbegrenzt Möglichkeiten sie einzusetzen. Lasst zum Beispiel in einer Variablen eine einfache Rechnung ausführen und zeigt das Ergebnis mithilfe einer anderen Variable an.
10/24/2010 14:51 FizzeBu#5
4.InputBox
So, jetzt haben wir ziemlich viel trockenes Zeugs gelernt. Bisher hat das Skript sich einfach nur stur ausgeführt und nicht auf den User geachtet. Wir wollen aber, dass der User mitbestimmen kann, was als nächstes geschieht. Das kann man zum Beispiel mit einer InputBox machen. Wenn wir in die Funktionsreferrenz schauen finden wir einige Parameter:
Code:
InputBox ( "title", "prompt" [, "default" [, "password char" [, width [, height [, left [, top [, timeout [, hwnd]]]]]]]] )
Da wir alle nötigen Parameter schon kennen ist das nicht viel Arbeit. Alles was zu sagen ist, ist, dass "promt" gleichbedeutend wie "text" ist. So, wir kennen den Befehl, aber wie können wir das Ergebnis abspeichern? Klar, mit einer Variablen. Wir wollen ein Skript, das eine User definierte Zeitz wartet, bevor es die nächste MessageBox öffnet.
Code:

Code:
$time = InputBox("Zeit", "Bitte gib die Länge der Skriptpause in Sekunden an:")
$timeforsleep = $time * 1000
Sleep($timeforsleep)
MsgBox(0,"Info", "Jetzt wurden " & $time &" Sekunden gewartet.")
Exit
Erklärung:
$timeforsleep rechnet die Benutzereingabe in ein für AutoIt passendes Format um. Der Rest sollte selbsterklärend sein.
10/24/2010 14:54 FizzeBu#6
5.If-Then - ElsIf-Then - Else - EndIf
If testet, ob eine bestimmte Bedingung erfült worden ist, zum Beispiel ob der Rückgabewert einer Messagebox "Ja" entspricht, ElseIf testet, falls die erste Bestimmung nicht erfüllt wurde, ob eine andere Bestimmung erfüllt ist, man kann ElseIF beliebig oft verwenden. Else wird ausgeführt, wenn keine bestimmte Bedingung erfült ist.
Code:

Code:
$var = InputBox("Frage", "Heißt du Hans-Peter? Nur mit Ja oder Nein antworten!")
If $var = "Ja" Then
    MsgBox(0, "Begrüßung", "Hallo Hans-Peter, lange nicht mehr gesehen.")
ElseIf $var = "Nein" Then
    MsgBox(0x, "Begrüßung", "Hallo, du nicht Hans-Peter :P")
Else
    MsgBox(0, "Fail", "Nur mit Ja oder Nein antworten.")
EndIf
Exit
Erklärung:
If ist ziemlich einfach und man sollte jetzt keine Erklärung dafür brauchen.
10/24/2010 14:55 FizzeBu#7
6.WinExists
Unser neu erworbenes If-Wissen können wir gleich hier einsetzen. Wir testen, ob ein Fenstername existiert. Wir legen uns aber nicht auf einen Fensternamen fest, sondern finden den gesuchten Fensternamen mithilfe einer InputBox heraus. als erstes schauen wir uns aber die Funktion WinExists an:
Code:
WinExists ( "title" [, "text"] )
Dieses mal ist "title" aber nicht der Titel von einem von AutoIt generierten Fesnter, sondern von dem Fenster, welches gefunden werden soll.
Code:

Code:
$name = InputBox("Fenstertitel", "Wie heißt der gesuchte Fesntertitel?")
$var = WinExists($name)
If $var = 1 Then
    MsgBox(0, "Win", "Das Fenster existiert.")
ElseIf $var = 0 Then
    MsgBox(0, "Fail", "Das Fenster existiert nicht.")
EndIf
Exit
Es gibt viele ähnliche Funktionen, zum Beispiel WinActive, WinWaitActive, etc.
10/24/2010 14:58 FizzeBu#8
7.While Schleife
Bisher ist das Skript einfach abgelaufen und hat sich dann beendet. Wir wollen aber, dass ein Skript solange abläuft. bis der User es schließen will. Das geht mit einer While-Schleife. While-Schleifen sind einfach und sollten kein Problem darstellen.

7.1

7.2
10/24/2010 15:04 FizzeBu#9
8.Send
So, jetzt kommen wir zu einer sehr wichtigen Funktion: Send. AutoIt ist dazu ausgelegt um Bots zu schreiben. Bei vielen MMORPGs muss man viele Monster töten um wichtige Sachen zu bekommen oder zu leveln. Warum sich selber die Mühe machen, wenn man alles AutoIt machen lassen kann? Send() kann einen Tastenanschlag simulieren, verpacken wir alles in eine While-Schleife:
Code:

Code:
While 1
    Send("Angriffstaste")
    Sleep(50)
    Send("Pickuptaste")
    Sleep(50)
Wend
Bei den Tasten muss man beachten, dass Sonderzeichen wie +,#,!,^,° etc. in { } Geschweifte Klammern zu setzen. Strg, Alt, Enter, Leer haben eigene Sonderzeichen oder Namen. Hier die Liste aus der Hilfe:

11/18/2010 21:21 FizzeBu#10
9. ControlSend
Mit Send() haben wir ein mächtiges Werkzeug erhalten. Wir können Tastenanschläge simulieren. Der Nachteil ist, dass Send() an das aktive Fenster sendet. Wir wollen aber einen Bot schreiben, der an ein Fenster sendet, welches nicht aktiv ist, z.B. ein minimiertes Spiel. Das können wir mit dem Befeh ControlSend() tun:
Code:
ControlSend ( "title", "text", controlID, "string" [, flag] )
Sollte selbsterklärend sein:"title" und "text" für den Titel und eventuell den Text des Zielfensters, controlID ist eher unwichtig und "string" sind die Tasten die man senden will.
Jetzt verpacken wir alles in eine Endlosschleife:
Code:
While 1
	ControlSend("Titel des Spiels", "", ,"Angriffstaste")
	Sleep(50)
	ControlSend("Titel des Spiels", "", ,"Pickuptaste")
	Sleep(50)
WEnd
"text" gibt es bei den meisten Spielen nicht und controlID benutzt man, wenn man einem selbsterstellten AutoItfenster etwas senden will.

Hier muss man auch die Sonderzeichen bzw. Namen von AutoIt beachten. Hier nochmal die Tabelle:
11/19/2010 18:11 Akorn#11
Quote:
Originally Posted by FizzeBu View Post
Genau deswegen poste ich es nicht da rein;
Da es hier aber schon dutzende schlechte Autoit tutorials gibt, ist deines hier im grunde genommen nur Sinnloser spamm.