ich habe mir lange überlegt, ob ich diese Tutorial schreiben soll. Ich habe mich entschieden, eine How to zuschreiben, in dem man ein Programm schreibt, was folgendes kann:
- Browse Funktion
- Speichern und Öffnen
- Hotkeys einstellen
- 3 verschiedene Mausbefehle
- Abstand nach jedem Klick einstellen
- Imagesearch Funktion
Vielleicht für manche zu einfach, doch mit diesen Programm kann man vieles lernen, finde ich. Auch für Neulinge ist es ein guter Start, da ich auch mit Messangeboxen arbeite und etc....
An alle "Ich kopier nur das Script und gib es als meins aus" ist mir egal, das ich ist eine Lerntutorial, deswegen werdet ihr den vollständigen Scriptcode am Ende nicht finden
Inhaltsangabe:
1. Was brauchen wir?
2. Das Fenster (GUI-FORM) erstellen
3. Wichtige Variablen bzw. Includes von Anfang an setzen
4. Browse Funktion
5. Speichern und öffnen Funktion
6. Hotkeys einstellen
7. Checkboxen Einstellungen
8. Den Hauptbefehl Imagesearch finden + Mausbefehle
9. Timer einstellen
Was brauchen wir?
Ihr braucht die Imagesearch.au3 und die Imagesearch.dll. Der Download von den beiden Sachen findet ihr hier ->
Die Imagesearch.au3 müsst ihr in den Include Ordner eures AutOit Installationsordner einfügen und die Imagesearch.dll bei euren Script im Ordner.
Die Imagesearch.au3 müsst ihr in den Include Ordner eures AutOit Installationsordner einfügen und die Imagesearch.dll bei euren Script im Ordner.
Erstellt ein GUI bzw. ein Fenster mit folgenden Inhalt:
Achtet darauf verständliche Variablen den jeweiligen GUI-Befehlen zu geben, damit ihr nicht den Überblick verliert.
Es könnte dann so aussehen:
Ich poste mein GUI-FORM Script-Code damit es für euch noch besser zu verstehen ist, wenn ich meine Variablen benutze:
- x4 Inputfeldern
- x3 Buttons
- x3 Checkboxen
- x1 Menü
- x2 Untermenü
Achtet darauf verständliche Variablen den jeweiligen GUI-Befehlen zu geben, damit ihr nicht den Überblick verliert.
Es könnte dann so aussehen:
Ich poste mein GUI-FORM Script-Code damit es für euch noch besser zu verstehen ist, wenn ich meine Variablen benutze:
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Users\TheFreakBpx3\Desktop\Programme\fz3\design.kxf
$Form1 = GUICreate("F.I.K. Copyright 2011 Freaksoft", 414, 250, 398, 314)
GUISetFont(12, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 8, 40, 313, 28)
$browse = GUICtrlCreateButton("Browse", 328, 32, 73, 41, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("Wähle dein Bild bzw. Bild Ausschnitt:", 8, 16, 250, 23)
GUICtrlSetFont(-1, 12, 400, 0, "Candara")
$checkbox1 = GUICtrlCreateCheckbox("Doppelklick", 8, 152, 113, 25)
$checkbox2 = GUICtrlCreateCheckbox("Rechtsklick", 8, 176, 105, 25)
$checkbox3 = GUICtrlCreateCheckbox("Linksklick", 8, 200, 113, 25)
$Label2 = GUICtrlCreateLabel("HotKeys setzen:", 144, 136, 112, 23)
GUICtrlSetFont(-1, 12, 400, 0, "Candara")
$Label3 = GUICtrlCreateLabel("Starten:", 144, 168, 61, 24)
$starten = GUICtrlCreateInput("", 208, 168, 89, 21)
$Label4 = GUICtrlCreateLabel("Beenden:", 144, 200, 73, 24)
$beenden = GUICtrlCreateInput("", 216, 200, 81, 21)
$startenb = GUICtrlCreateButton("Starten", 312, 152, 89, 33, $WS_GROUP)
$beendenb = GUICtrlCreateButton("Beenden", 312, 192, 89, 33, $WS_GROUP)
$Label5 = GUICtrlCreateLabel("Abstand nach jedem Klick (in Sekunden) : ", 8, 80, 284, 23)
GUICtrlSetFont(-1, 12, 400, 0, "Candara")
$sekunden = GUICtrlCreateInput("", 8, 104, 313, 28)
$MENU = GUICtrlCreateMenu("Datei")
$MENU1 = GUICtrlCreateMenuItem("Speichern unter...",$MENU)
$MENU2 = GUICtrlCreateMenuItem("Öffnen",$MENU)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Jetzt einmal müssen wir die Imagesearch.au3 "includieren", damit wir die Funktion _Imagessearch funktioniert. Schreibt einfach über oder unter diesen Includes:
dieses hier:
sollte dann so aussehen:
Jetzt müssen wir noch einige Variablen im voraus setzen, damit wir das später nicht machen. Die Erklärungen werden dann kommen, wenn ich die Variablen benutze:
Einfach über den Includes setzen.
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
PHP Code:
#include <Imagesearch.au3>
PHP Code:
#include <Imagesearch.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
PHP Code:
$x1 = 0
$y1 = 0
Ich glaube jeder kennt die Browse Funktion: Man klickt auf das Button und dann öffnet sich ein Fenster, wo man dann nach einer Datei auf den Datenträgern suchen kann. Dabei kann man einstellen welche Dateien nur angezeigt werden sollen.
Der Befehl der uns das ermöglicht heißt in AutoIt:
Zunächst muss man den Text der oben links im Fenster steht festlegen, danach im welchen Ordner das Fenster sich öffnet und zum Schluss setzt man einen sogenannten "Filter", d. h. nur Dateiendungen die im Filter stehen werden angezeigt. Hier nochmal:
Beispiele:
Rot = "Wähle dein Bild!"
Grün = z.B. @WorkingDir @ScriptDir @DesktopDir
Blau = AutoIt erkennt nicht alle Bilder fügt einfach das für Filter ein:
Danach soll in der 1. Inputbox der Pfad zum Bild stehen, was man gesucht hat, also in dieser:
Deshalb benutzen wir den Befehl
Da wählt man zunächst aus, bei welchen GUI-Befehl die "Data" bzw. Text geändert wird. Ich wähle jetzt die Inputbox, die ich oben im Bild in einem roten Kasten makiert habe. Die zugeordnete Variable heißt bei mir:
Jetzt brauchen wir noch den Pfad der ja dort dann angezeigt werden soll, deswegen
müssen wir FileOpenDialog eine Variable zuordnen, zum Beispiel $file sollte dann so aussehen:
Dann sollte der Befehl so aussehen:
Der Befehl der uns das ermöglicht heißt in AutoIt:
PHP Code:
FileOpenDialog
Code:
FileOpenDialog([COLOR="Red"]Text[/COLOR],[COLOR="Green"]Ort[/COLOR],[COLOR="Blue"]Filter[/COLOR])
Rot = "Wähle dein Bild!"
Grün = z.B. @WorkingDir @ScriptDir @DesktopDir
Blau = AutoIt erkennt nicht alle Bilder fügt einfach das für Filter ein:
PHP Code:
"(*.jpg;*.png;*.bmp;*.gif)"
Deshalb benutzen wir den Befehl
PHP Code:
GuiCtrlSetData
PHP Code:
$Input1
müssen wir FileOpenDialog eine Variable zuordnen, zum Beispiel $file sollte dann so aussehen:
PHP Code:
$file = FileOpenDialog(...)
PHP Code:
GuiCtrlSetData($Input1,$file)
Speichern und öffnen Funktion
Die Speichern und Öffnen hat folgenden Vorteil: Das Programm erstellt eine *.ini Datei, mit den Inhalten der Inputfeldern. Durch die Funktion Öffnen wird die *.ini Datei ausgelesen und der Inhalt der Inputfeldern dementsprechend verändert. Der Nachteil ist meistens, dass es öfters zu Problemen mit dem Imagesearch kommt, wenn ich das Problem gefixxt habe, ändere ich das in der How to.
Damit man keine weiteren Buttons und etc erstellen muss, benutze ich Menüs. Vorteile sind das hier mehr lernt und das Programm übersichtlicher ist. Ein Menü sieht so aus:
Diese Menüs haben auch Variablen zugeordnet bekommen. Die Variable für das Menü bzw (Menu) ist nicht wichtig, viel wichtiger sind die Variablen von den Untermenüs bzw. (MenuItem) bei mir heißen diese:
Damit man seine *.ini individuell benennen kann und einen individuellen Speicherort wählen kann, benutzt
(das ist genau das selbe nur auf den Button unten recht steht nicht öffnen, sondern speichern) man sollte nur den Filter ändern, also
und geben den Befehl eine Variable, ich nehme jetzt mal $file2. Jetzt brauchen wir noch noch ein Befehl der auch unsere *.ini erstellt, und der Befehl kann kein anderer sein als
Eine Ini ist folgendermaßen ausgebaut:
Die Sektion ist sowas wie eine Überschrift, und Key sowas wie ein Beschreibung, zum Beispiel :
Der Befehl IniWrite ist so aufgebaut:
Für den Value bzw. Wert müssen wir den Inhalt der Inputfelder nehmen. Doch wir können nicht einfach $Input1 für den Value hinschreiben, sondern müssen den Befehl verwenden:
Dieser Befehl lässt ein Inputfeld, Editfeld, Button, Label und etc auslesen. Das könnte dann so aussehen:
Das müsst ihr noch 3 mal machen, für die Sekunden, und wir die Hotkeys.
Hier mal die Sections und Keys für die anderen:
Zeit:
Section = Abstand
Key = Sekunden
Hotkeys:
Section = Hotkey
Key = Starten bzw. Beenden
Um eine *.ini Datei zu öffnen benutzt man dann wieder
Erklärung Siehe -> Browse Funktion
Wir benutzen nun wieder einen Befehl den uns in dieser How to schon einmal begegnet ist, nämlich
Hier machen wir das selbe wie gerade, angeben, welches Inputfeld geändert werden soll und dann der Text. Nur der Text soll jetzt kein x-beliebiger sein sondern das VALUE von der *.ini, deshalb benutzen wir den Befehl
Dieser befehlt ließt eine *.ini aus und gibt den Wert (Value) zurück. Das coole daran ist, wenn man irgendeine andere *.ini Datei benutzt die nicht von diesem Programm erstellt wurde, werden die Inputfelder nicht gefüllt, weil die nicht die richtige Section und nicht den richtigen Key haben. Man gibt nämlich an welche Section und welchen Key die *.ini haben muss, um den Wert wiederzugeben. Beispiel:
Die Spalte von Value lässt man frei, den diese wird ja dann ausgelesen. Dies macht man bei allen vier. Bei dem ersten also beim Pfad würde das dann so aussehen:
Der ganze Befehl also für das erste hieße dann
Damit man keine weiteren Buttons und etc erstellen muss, benutze ich Menüs. Vorteile sind das hier mehr lernt und das Programm übersichtlicher ist. Ein Menü sieht so aus:
Diese Menüs haben auch Variablen zugeordnet bekommen. Die Variable für das Menü bzw (Menu) ist nicht wichtig, viel wichtiger sind die Variablen von den Untermenüs bzw. (MenuItem) bei mir heißen diese:
PHP Code:
$MENU1 und $MENU2
PHP Code:
FileSaveDialog
PHP Code:
"(*.ini)"
PHP Code:
IniWrite
Code:
[Sektion] key=value
Code:
[elitepvpers.com Daten] ID=TheFreakBpx3 PW = *zensiert :D*
PHP Code:
IniWrite(Speicherort+dateiname,Sektion,Key,Value)
PHP Code:
GuiCtrlRead
PHP Code:
IniWrite($file2,"Bild","Pfad",GUICtrlRead($Input1))
Hier mal die Sections und Keys für die anderen:
Zeit:
Section = Abstand
Key = Sekunden
Hotkeys:
Section = Hotkey
Key = Starten bzw. Beenden
Um eine *.ini Datei zu öffnen benutzt man dann wieder
PHP Code:
FileOpenDialog
Wir benutzen nun wieder einen Befehl den uns in dieser How to schon einmal begegnet ist, nämlich
PHP Code:
GuiCtrlSetData
PHP Code:
IniRead
PHP Code:
IniRead($file,"SECTION","KEY","")
PHP Code:
IniRead($file,"Bild","Pfad","")
PHP Code:
GUICtrlSetData($Input1,IniRead($file1,"Bild","Pfad",""))
Um Hotkeys zu erstellen, braucht man den Befehl
Diesen Befehl setzt man meistens vor dem ganzen Script, jedoch wäre das bei unseren Programm sinnlos . Die beiden Befehle werden später unter den Scriptcode von Imagesearch eingefügt.
So zu Anfang müssen wir die Inputfelder auslesen, weil man als User die HotKeys in den Inputfeldern eingibt. Deswegen benutz man wieder den Befehl
Die geben wir dann jeweils eine Variable bei mir dann so:
Dann setzen wir den HotKey einmal für Starten und einmal fürs Beenden. Der Befehl ist dabei wie folgt aufgebaut, zunächst der HotKey ( hier bei uns nur a-z ; 0-9 ) und dann der name der des Hotkeys. Also bei mir dann so:
Hat man seine HotKeys gewählt muss man ja noch den Befehl hinzufügen. Für die Befehle benutzt man nicht Case so wie bei den Buttons sondern Fürs beginnen
und fürs Enden
Nach Func schreibt man noch den Namen des Hotkeys, bei mir heißen diese starten und beenden. Man muss aber noch dazu zwei Klammern nach dem Namen machen "()" Für den HotKey Beenden, muss man lediglich exit zwischen Func und EndFunc schreiben, so:
Für den HotKey starten fügt man einfach zwischen den Func und den EndFunc den Scriptcode für Imagesearch ein. Achtet darauf das beide "Func's" Am Ende des Scripts sind! Nach dem EndSwitch!
PHP Code:
HotKeySet
So zu Anfang müssen wir die Inputfelder auslesen, weil man als User die HotKeys in den Inputfeldern eingibt. Deswegen benutz man wieder den Befehl
PHP Code:
GuiCtrlRead
PHP Code:
$Startset= GUICtrlRead($starten)
$beendenset= GUICtrlRead($beenden)
PHP Code:
HotKeySet($Startset,"starten")
HotKeySet($beendenset,"beenden")
PHP Code:
Func
PHP Code:
EndFunc
PHP Code:
Func beenden()
exit
EndFunc
Wenn eine von drei Checkboxen angeklickt worden ist, sollen die anderen Checkboxen unanklickbar sein, das würde so aussehen:
Klickt man das Häckchen wieder weg, sollen alle wieder anklickbar sein. Zunächst einmal suchen wir uns unsere 3 Variablen für unsere Checkboxen. Meine heißen:
Um herauszufinden ob eine Checkbox angeklickt worden ist benutzt man auch den Befehl
Aber dies alleine reicht nicht. AutoIt hat Variablen von Anfang an festgelegt, die man benutzen, eine davon heißt
Heißt so viel angeklickt. Jetzt soll ja wenn diese Checkbox angeklickt ist, die anderen unanklickbar sein, doch bevor wir dazu kommen müssen wir erstmal eine If-Funktion benutzen, also:
Jetzt gibt wieder eine vorprogrammierte Variable, die sich
nennt, heißt so viel wie nicht anklickbar. Jedoch können wir nicht einfach das mit dem Befehl
machen, weil dies sich nur auf Text bezieht. Wir brauchen einen neuen Befehl, nämlich:
Dieser ist genau so aufgebaut wie Guictrlsetdata nur, als Data ist das kein Text, sondern ich sag mal Zustand. Und wenn einer von dreien angeklickt ist soll der "Zustand" der anderen beiden nicht anklickbar sein. Deshalb
Dann hätten wir schoneinmal das wenn die 1. Checkbox angeklickt ist, die anderen unanklickbar sind. So lässt sich vermeiden das jmd. mehrere Checkboxen angeklickt und das Programm sich aufhängt, wenn Imagesearch startet. Falls aber die 1. Checkbox nicht mehr angeklickt ist, sollen die anderen wieder anklickbar sein, deswegen schreiben wir ein
das ist english und heißt sonst, also falls die aussage nicht eintrifft, soll das Programm folgendes prüfen: Es soll gucken ob das Programm nicht angeklickt ist, und da gibt es ein Gegenteil von $GUI_CHECKED, nämlich :
Jetzt müssen wir nurnoch, statt
auch das gegenteil nehmen, nämlich
Jetzt dürft ihr natürlich nicht die beiden
vegessen, diese beenden nämlich die If-Funktion. Ohne diese Funktioniert das nicht. Ingesamt sollte das dann so aussehen:
Jetzt muss man sich nurnoch überlegen wo man diesen Code einfügt, irgendwo ist nicht richtig. Die Checkboxen sollen ja nur geprüft werden wenn die Checkbox angeklickt wird. Deswegen schreibt man das unter ( bei mir jetzt)
und so weiter...
Klickt man das Häckchen wieder weg, sollen alle wieder anklickbar sein. Zunächst einmal suchen wir uns unsere 3 Variablen für unsere Checkboxen. Meine heißen:
PHP Code:
$checkbox1 $checkbox2 und $checkbox3
PHP Code:
GuiCtrlRead
PHP Code:
$GUI_CHECKED
PHP Code:
if GUICtrlRead($checkbox1) = $GUI_CHECKED Then
PHP Code:
$gui_disable
PHP Code:
GuiCtrlSetData
PHP Code:
GuiCtrlSetState
PHP Code:
GUICtrlSetState($checkbox2, $gui_disable)
GUICtrlSetState($checkbox3, $gui_disable)
PHP Code:
else
PHP Code:
$GUI_UNCHECKED
PHP Code:
$gui_disable
PHP Code:
$gui_enable
PHP Code:
EndIf
PHP Code:
if GUICtrlRead($checkbox1) = $GUI_CHECKED Then
GUICtrlSetState($checkbox2, $gui_disable)
GUICtrlSetState($checkbox3, $gui_disable)
else
If GUICtrlRead($checkbox1) = $GUI_UNCHECKED Then
GUICtrlSetState($checkbox2, $gui_ENABLE)
GUICtrlSetState($checkbox3, $gui_ENABLE)
endif
endif
PHP Code:
Case $checkbox1
Den Hauptbefehl Imagesearch + Mausbefehle
Die Imagesearch Funktion sucht nach einen Bild. Und speichert dann die Koordinaten. Mit diesen Koordinaten kann zum Beispiel mit der Funktion Mouseklick dann auf das Bild klicken. Zum Beispiel praktisch bei einem Suchspiel Es gibt natürlich schon eine Video Tutorial, der Link ist oben schon. Aber ich erkläre es euch nochmal hier, also zunächst einmal, wie heißt der Befehl:
Dieser Befehl wechselt seine Farbe nicht, deshalb bleibt dieser schwarz. So zunächst einmal, brauch der Befehl ein Bild bzw. Bildauschnitt, diesen haben wir ja bei der Browse Funktion gewählt, deshalb müssen wir dort einfach
eintragen, den das ist die Variable die wir FileOpenDialog zugeteilt haben. So sieht unser Befehl dann bis jetzt aus:
Jetzt sollen wir festlegen, welche Koordinaten des Bildes festgehalten werden soll. Linksoben = 0 In der Mitte = 1 Wenn er das Bild gefunden hat soll er die Koordinaten von der Mitte des Bildes speichern. Deshalb 1. Jetzt müssen wir angeben, in welchen Variablen die x-Position und die y-Position festgehalten wird, und am Anfang haben wir ja schon 2 Variablen festgelegt :
Diese haben einen Wert von 0. Man muss diese Variablen zuvor festlegen, weil jede Variable einen Wert braucht/haben muss. Deswegen hätte ich nicht einfach nur $x1 und $y1 bei Imagesearch nehmen können. Das letze was Imagesearch brauch, ist wie weit das Bild vom Bild bzw. Bildauschnitt abweichen kann 0 = garnicht.... und so weiter. Hier nehme ich 0, den er soll das exakte Bild ja finden. So sieht dann unser Code aus:
Wenn das Bild gefunden worden ist, soll das ja einen Doppelklick auf's Bild machen, Rechtsklick oder Linksklick, das kann man alles mit einer If-Funktion machen. Doch zuvor muss man angeben, wann man einen Doppelklick,Rechtsklick oder Linksklick. Er soll klicken, wenn er das Bild gefunden hat. Und 0 = nicht gefunden und 1 = gefunden. Heißt wir müssen der Imagesearch Funktion eine Variable geben. Ich gebe ihr die Variable $bild, sieht dann so aus:
Jetzt müssen wir eine If-Funktion machen. Wenn das Bild gefunden worden ist dann soll folgendes passieren, deswegen:
Jetzt müssen die Checkboxen kontrolliert werden, und jetzt müssen wir einfach den selben Befehl nehmen wie zuvor bei den Checkboxen:
Und falls diese Checkbox angeklickt ist, soll ein Doppelklick gemacht werden, dies macht man einfach mit
Dieser Befehl brauch aber die Koordinaten des Bildes, deswegen geben wir für die Werte unsere Variablen an. So:
Zwei mal weil das ja ein Doppelklick sein soll. Jetzt muss ein
danach schreiben, den falls die 1. Checkbox nicht angeklickt ist soll geprüft werden ob die 2. oder vllt die 3. Checkbox angeklickt worden ist. Das Verfahren ist genauso wie bei der 1. Für Rechtsklick macht man:
Hier nocheinmal für Doppelklick+ Anfang der 2. Checkbox :
PHP Code:
_Imagesearch
PHP Code:
$file
PHP Code:
_Imagesearch($file,
PHP Code:
$x1 = 0
$y1 = 0
PHP Code:
_ImageSearch($file,1,$x1,$y1,0)
PHP Code:
$bild = _ImageSearch($file,1,$x1,$y1,0)
PHP Code:
If $bild = 1 Then
PHP Code:
If GUICtrlRead($checkbox1) = $GUI_CHECKED Then
PHP Code:
Mouseklick
PHP Code:
MouseClick("LEFT",$x1,$y1)
MouseClick("LEFT",$x1,$y1)
PHP Code:
else
PHP Code:
MouseClick("RIGHT",$x1,$y1)
PHP Code:
If GUICtrlRead($checkbox1) = $GUI_CHECKED Then
MouseClick("LEFT",$x1,$y1)
MouseClick("LEFT",$x1,$y1)
else
If GUICtrlRead($checkbox2) = $GUI_CHECKED Then
...
...
Schlusswort
Ich hoffe ich konnte einigen damit helfen, etwas mehr über AutoIt zu erfahren. Wenn an manchen stellen zu wenig erklärt worden ist, macht mich darauf Aufmerksam ich werde es verbessern!
Credits:
1. Menan für Imagesearch
2. Ludder231 und ich für Checkboxen Funktion
3. Ich für den Rest ( Bilder, Tut, Text)
Wenn ihr gerne mein Script-Code haben möchtet, schreibt mir eine PN, nicht jeder bekommt ihn!
Credits:
1. Menan für Imagesearch
2. Ludder231 und ich für Checkboxen Funktion
3. Ich für den Rest ( Bilder, Tut, Text)
Wenn ihr gerne mein Script-Code haben möchtet, schreibt mir eine PN, nicht jeder bekommt ihn!
TheFreakBpx3