|
You last visited: Today at 03:01
Advertisement
[AutoIt] ImageSearch
Discussion on [AutoIt] ImageSearch within the Coding Tutorials forum part of the General Coding category.
05/29/2016, 17:44
|
#1
|
elite*gold: 122
Join Date: May 2014
Posts: 2,722
Received Thanks: 526
|
[AutoIt] ImageSearch
Hallo Leute, ich möchte euch zeigen wie ihr am einfachsten einen ImageSearch Bot erstellen könnt.
Was ist ImageSearch?
ImageSearch ist eine Funktion, mit der man nach bestimmten Bildern auf dem Bildschirm suchen kann, und dann damit interagieren kann. (z.B. Wenn Bild gefunden, dann draufdrücken..)
Wie benutze ich ImageSearch? (1/2)
Zuerst ladet ihr euch die ImageSearch.au3 herunter und die ImageSearchDLL.dll
Diese findet ihr hier: 
Die ImageSearch.au3 tut ihr in eurem AutoIt Ordner unter Include.
Dateipfad könnte so aussehen: C:Program Files (x86)AutoIt3Include
Jetzt sind wir noch nicht fertig! Die ImageSearchDLL.dll tut ihr in eurem Windows Ordner unter System32
Auch hier nachzulesen:
Wie benutze ich ImageSearch? (2/2)
Als aller erstes müsst ihr die ImageSearch.au3 includieren! Dies tut ihr in der aller ersten Zeile mit dem "Befehl"
Code:
#include <ImageSearch.au3>
Nun haben wir die ImageSearch.au3 mit eingebunden und können jetzt die Funktionen nutzen! Ich beschäftige mich hier nur mit _ImageSearch NICHT mit _ImageSearchArea!
Ich habe es immer gerne wenn ich ImageSearch verwende, das dieses Programm Steuerbar mit HotKeys (F1,F2) ist. Um dies zu tun schreibt ihr nach dem ihr dieses #include schriebt:
Code:
HotKeySet("{F1}","starten")
HotKeySet("{F2}","stoppen")
While 1
Sleep(1)
WEnd
Func starten()
EndFunc
Func stoppen()
Exit 1
EndFunc
Die While-Schleife kann auch ganz am Ende des Codes getan werden, ich hab es allerdings gleich am Anfang.
Gehen wir nun zu dem eigentlichen Befehl, und klamüsern erstmal alles auseinander.
Code:
$search = _ImageSearch("datei.bmp",1,$x,$y,0)
$search - eine von uns festgelegte Variable
_ImageSearch - Funktion aus der ImageSearch.au3
"datei.bmp" - hier das Bild was wir suchen (geht auch mit anderen Formaten z.B. "haus.png" etc..)
1 - die Maus wird auf die Mitte des Bildes drücken
$x,$y - hier werden die Koordinaten gespeichert wo das Bild gefunden wurde
0 - Toleranzwert (je höher der Toleranzwert, desto höher ist die Chance das die Funktion auch was anderes findet!)
Bevor wir aber den Befehl von oben kopieren & einfügen, muss man vorher noch $x und $y deklarieren! Undzwar sind die Werte der beiden Variablen "0".
Quasi:
Code:
$x = 0
$y = 0
$search = _ImageSearch("datei.bmp",1,$x,$y,0)
Jetzt können wir abfragen ob die Suche Erfolgreich (1) war!
Dies tut man mit:
Code:
If $search = 1 Then
Else
MsgBox("","Error 1","Bild wurde nicht gefunden")
EndIf
Jetzt dürft ihr selber entscheiden was getan werden soll, wenn das Bild gefunden wurde. Ich benutze oft ImageSearch, um dann auf das Bild draufzudrücken, dies tut man wie folgt:
Code:
If $search = 1 Then
MouseClick("left",$x,$y,1)
Else
MsgBox("","Error 1","Bild wurde nicht gefunden")
EndIf
Da die Werte der Variablen $x,$y überschrieben werden, mit den Koordinaten wo das Bild gefunden wurde, können wir auch hier einen Klick darauf machen!
Nach dem MouseClick könntet ihr dann wieder ein anderes Bild suchen, achtet darauf das keine Variable 2 mal vorkommt! Auch nicht das x und das y!
Mit freundlichen Grüßen, Melli-
|
|
|
06/04/2016, 02:06
|
#2
|
Moderator
elite*gold: 66
Join Date: Apr 2012
Posts: 3,446
Received Thanks: 1,734
|
Schön, dass du dir die Zeit genommen hast, die ImageSearch Funktion zu erklären. Ich find das Tutorial leider nicht sehr gelungen. Aber du kannst es ausbauen und überarbeiten, da die Funktion mMn sehr nützlich ist und sie ein ordentliches Tutorial verdient hat. Daher komm ich auch direkt mal zu meinen Kritikpunkten/Verbesserungsvorschlägen:
1. Die ImageSearchDLL.dll würde ich nicht in den Windowsordner packen, außer man will das Script nur für sich benutzen. Da hier aber viele Bots o.Ä. schreiben wollen, würde ich die DLL lokal vom Script aus speichern, am besten in einen Ordner, wo sich dann auch die ganzen anderen Ressourcen, wie z.B. die zu suchenden Bilder, befinden.
2. ̶i̶̶n̶̶c̶̶l̶̶u̶̶d̶̶i̶̶e̶̶r̶̶e̶̶n̶ --> importieren
3.
Code:
While 1
Sleep(1)
WEnd
Den Sleep änderst du bitte schnell in mind. 100, bevor alpines hier auftaucht.
4. Die Parameter kann man ruhig ausführlicher erläutern. Was hat ImageSearch für einen Rückgabetyp? Wo müssen sich die Bilder befinden, wenn ich einfach name.bmp eingebe? Funktioniert das auch mit transparenten Bildern?
5. ImageSearch lässt sich gut an Beispielen erklären. Man muss jetzt keinen ganzen Bot schreiben, aber man könnte sich ein kleines Spiel herausnehmen und selbst mit Pseudo Code zeigen, in welche Richtung das gehen würde.
|
|
|
06/06/2016, 07:25
|
#3
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 814
|
Quote:
Originally Posted by Moneypulation
Den Sleep änderst du bitte schnell in mind. 100, bevor alpines hier auftaucht.
|
Ich sollte beim nächsten Mal die Threads nicht überfliegen sonst verpasse ich hier noch was
Die Sleep-Funktion von AutoIt sleept immer mindestens 10ms, das ist ganz leicht nachprüfbar mit folgendem Script.
Code:
$tmr = TimerInit()
Sleep(1)
MessageBox(0, "", TimerDiff($tmr))
Sleep(100) sollte auch eigentlich in den meisten Fällen reichen, da das hier aber eine Schleife ist die das Programm nur am laufen hält, kannst du auch 1000ms oder mehr nehmen.
|
|
|
06/11/2016, 17:48
|
#4
|
elite*gold: 11
Join Date: Aug 2011
Posts: 833
Received Thanks: 150
|
Code:
#include<ImageSearch.au3>
HotKeySet("(NUMPAD2)","starten")
HotKeySet("(NUMPAD3)","beenden")
$x1=0
$y1=0
$x2=0
$y2=0
While 1
Sleep(1)
WEnd
Func starten()
While 1
$resulte=_ImageSearch("IdleWC.png",1,$x1,$y1,0)
If $resulte=1 Then
$resulte_ImageSearch("yewtext.png",1,$x2,$y2,0)
IF $resulte=1 Then
MouseClick("LEFT",$x2,$y2)
EndIf
EndIf
WEnd
EndFunc
Func beenden()
exit 0
EndFunc
was stimmt damit nicht ? nichts passiert
epvpImg: simple. epvpImg: superb image hosting.
hier sind die zwei bilder
|
|
|
06/11/2016, 20:55
|
#5
|
elite*gold: 122
Join Date: May 2014
Posts: 2,722
Received Thanks: 526
|
Quote:
Originally Posted by .TheBlueOptic
Code:
#include<ImageSearch.au3>
HotKeySet("(NUMPAD2)","starten")
HotKeySet("(NUMPAD3)","beenden")
$x1=0
$y1=0
$x2=0
$y2=0
While 1
Sleep(1)
WEnd
Func starten()
While 1
$resulte=_ImageSearch("IdleWC.png",1,$x1,$y1,0)
If $resulte=1 Then
$resulte_ImageSearch("yewtext.png",1,$x2,$y2,0)
IF $resulte=1 Then
MouseClick("LEFT",$x2,$y2)
EndIf
EndIf
WEnd
EndFunc
Func beenden()
exit 0
EndFunc
was stimmt damit nicht ? nichts passiert
epvpImg: simple.epvpImg: superb image hosting.
hier sind die zwei bilder
|
Dein Fehler lag daran, das du nachdem du If $resulte=1 Then
du bei "$resulte_ImageSearch" ein "=" vergessen hast. Außerdem darfst du zwei Bilder nicht auf eine Variable festlegen, deswegen schrieb ich im umgeschriebenen Script "$resulte1", so kannst du dir sicher sein, das du dies als Fehlerquelle ausschließen kannst, falls es nicht klappen sollte.
Code:
#include<ImageSearch.au3>
HotKeySet("(NUMPAD2)","starten")
HotKeySet("(NUMPAD3)","beenden")
$x1=0
$y1=0
$x2=0
$y2=0
While 1
Sleep(1)
WEnd
Func starten()
While 1
$resulte=_ImageSearch("IdleWC.png",1,$x1,$y1,0)
If $resulte=1 Then
$resulte1= _ImageSearch("yewtext.png",1,$x2,$y2,0)
If $resulte1=1 Then
MouseClick("LEFT",$x2,$y2)
EndIf
EndIf
WEnd
EndFunc
Func beenden()
exit 0
EndFunc
|
|
|
06/11/2016, 23:17
|
#6
|
elite*gold: 11
Join Date: Aug 2011
Posts: 833
Received Thanks: 150
|
Ich habe die DLL alle Bilder und die .au3 Dateien in einem Ordner aber er gibt mir immer.
"C:\Program Files (x86)\AutoIt3\Include\ImageSearch.au3" (44) : ==> Subscript used on non-accessible variable.:
if $result[0]="0" then return 0
if $result^ ERROR
hab auch schon als admin ausgefürt
HotKeySet ("{F8}", "beenden")
#include<ImageSearch.au3>
$x1=0
$y1=0
$x2=0
$y2=0
While 1
ViewReset()
Sleep(2000)
starten()
WEnd
Func starten()
While 1
$resulte=_ImageSearch("yewaxt.png",1,$x1,$y1,0)
If $resulte=1 Then
$resulte1= _ImageSearch("chopedownyew.png",1,$x2,$y2,0)
If $resulte1=1 Then
MouseClick("LEFT",$x1,$y1)
EndIf
EndIf
WEnd
EndFunc
Func ViewReset()
MouseClick("LEFT",1757,55,1,1)
Send("{UP down}")
Sleep(2000)
Send("{UP UP}")
EndFunc
Func beenden()
MsgBox(0,"exiting", "ende")
Exit
EndFunc
|
|
|
01/21/2021, 19:21
|
#7
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1
Received Thanks: 0
|
Imagesearch verschiedener Bilder
Hallo,
ich bin ein absoluter Newbie was das programmieren betrifft.
Habe mir für ein Spiel einen Bot mit AutoIt erstellt welches auch läuft.
Das einzige was mich daran stört ist die lange Liste, welche sich auch ständig erweitert, da im laufe der Zeit immer mehr Bilder hinzukommen. Bisher habe ich die Liste erweitert wie man es gut im Script erkennen kann.
Ich denke aber dass es auch einfacher geht, weiß aber nicht wie.
Vielleicht hat ja einer eine Idee und hilft mir auf die Sprünge.
Ich freue mich auf eine Antwort von euch.
Hier nun der Script:
Ich hoffe ich füge ihn richtig ein :-)
;************************************************* ***************************
;* E N T D E C K E R A R T E F A K T *
;************************************************* ***************************
#include <imageSearch.au3>
Global $hotKeyPressed
AutoItSetOption( "MouseClickDelay", 30 )
AutoItSetOption( "SendKeyDelay", 30 )
; Hotkeys
HotKeySet ( "{F1}" , "_start" )
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet ( "{ESC}", "Terminate" )
Global $g_bPaused = False
Global $enabled = False
Func TogglePause()
$g_bPaused = Not $g_bPaused
While $g_bPaused
Sleep(100)
ToolTip('P A U S E', 200, 200)
WEnd
ToolTip("")
EndFunc ;==>TogglePause
Func ToggleEnable()
$enabled = Not $enabled
EndFunc
Func Terminate()
Exit
EndFunc
while (1)
sleep (250)
WEnd
_start()
Func _start()
_Main()
EndFunc
Func _Pause()
while (1)
sleep (250)
WEnd
EndFunc
;************************************************* ************************************************** ****************************
;Kurzbefehle
Func _Stern() ;auf Stern klicken
MouseClick ("left", 958, 977)
Sleep (200)
EndFunc
Func _Schatz()
MouseMove(930, 587,20)
MouseClick("Left", 930, 587) ;auf Schatz klicken
MouseMove(1100, 587,20)
MouseClick("Left", 1100, 587) ;auf Artefakt klicken
MouseMove(923, 738,20)
MouseClick("Left",923, 738) ;Bestätigen
Sleep(100)
EndFunc
Func _Bestaetigen()
MouseClick("Left",923, 719)
Sleep(100)
EndFunc ;===> Ende Kurzbefehle
;************************************************* ************************************************** ****************************
Func _Main()
_Artefakt()
_Suche()
_Exit()
EndFunc
;************************************************* ************************************************** ****************************
Func _Artefakt()
_Stern()
MouseClick ("left", 810,908) ;auf Spezialisten klicken
sleep (100)
MouseClickDrag("left", 1074, 567, 992, 567)
Send("{BS}") ;Rücktaste falls im Feld schon etwas steht
MouseMove(1018, 567, 20)
MouseClick ("left", 1018, 567)
Send("artef") ;Für alle Entdecker die auf Artefaktsuche gehen sollen
sleep (100)
EndFunc
;************************************************* ************************************************** ****************************
Func _Suche()
$x1 = 0
$y1 = 0
$x2 = 0
$y2 = 0
$x3 = 0
$y3 = 0
$x4 = 0
$y4 = 0
$x5 = 0
$y5 = 0
$x6 = 0
$y6 = 0
$x7 = 0
$y7 = 0
$x8 = 0
$y8 = 0
$x9 = 0
$y9 = 0
$x10 = 0
$y10 = 0
$x11 = 0
$y11 = 0
$x12 = 0
$y12 = 0
$x13 = 0
$y13 = 0
$x14 = 0
$y14 = 0
$x15 = 0
$y15 = 0
While 1
$resulte= _ImageSearchArea("Emphatische.bmp",1, 695,587, 1230,915, $x1, $y1, 50)
If $resulte=1 Then
MouseClick("Left", $x1, $y1)
_Schatz()
_Stern()
Else
$resulte1= _ImageSearchArea("Entzückende.bmp",1, 695,587, 1230,915, $x2,$y2, 50)
If $resulte1=1 Then
MouseClick("Left", $x2, $y2)
_Schatz()
_Stern()
Else
$resulte2= _ImageSearchArea("Erfahrener.bmp",1, 695,587, 1230,915, $x3,$y3,50)
If $resulte2=1 Then
MouseClick("Left", $x3, $y3)
_Schatz()
_Stern()
Else
$resulte3= _ImageSearchArea("Erfolgreicher.bmp",1, 695,587, 1230,915, $x4,$y4,50)
If $resulte3=1 Then
MouseClick("Left", $x4, $y4)
_Schatz()
_Stern()
Else
$resulte4= _ImageSearchArea("Mutige.bmp",1, 695,587, 1230,915, $x5,$y5,50)
If $resulte4=1 Then
MouseClick("Left", $x5, $y5)
_Schatz()
_Stern()
Else
$resulte5= _ImageSearchArea("Unerschrockene.bmp",1, 695,587, 1230,915, $x6,$y6,50)
If $resulte5=1 Then
MouseClick("Left", $x6, $y6)
_Schatz()
_Stern()
Else
$resulte6= _ImageSearchArea("Verzaubernde.bmp",1, 695,587, 1230,915, $x7,$y7,50)
If $resulte6=1 Then
MouseClick("Left", $x7, $y7)
_Schatz()
_Stern()
Else
$resulte7= _ImageSearchArea("Wilder.bmp",1, 695,587, 1230,915, $x8,$y8,50)
If $resulte7=1 Then
MouseClick("Left", $x8, $y8)
_Schatz()
_Stern()
Else
$resulte8= _ImageSearchArea("Bescheidener.bmp",1, 695,587, 1230,915, $x9,$y9,50)
If $resulte8=1 Then
MouseClick("Left", $x9, $y9)
_Schatz()
_Stern()
Else
$resulte9= _ImageSearchArea("Freimütiger.bmp",1,695,587, 1230,915, $x10,$y10,50)
If $resulte9=1 Then
MouseClick("Left", $x10, $y10)
_Schatz()
_Stern()
MouseClick ("Left", 1217, 885) ;nach unten scrollen
Else
$resulte10= _ImageSearchArea("Entdecker.bmp",1, 695,587, 1230,915, $x11,$y11,50)
If $resulte10=1 Then
MouseClick("Left", $x11, $y11)
_Schatz()
_Stern()
Else
$resulte11= _ImageSearchArea("Kühne Entdeckerin.bmp",1, 695,587, 1230,915, $x12,$y12,50)
If $resulte11=1 Then
MouseClick("Left", $x12, $y12)
_Schatz()
_Stern()
Else
$resulte12= _ImageSearchArea("Forscher.bmp",1, 695,587, 1230,915, $x13,$y13,50)
If $resulte12=1 Then
MouseClick("Left", $x13, $y13)
_Schatz()
_Stern()
Else
$resulte13= _ImageSearchArea("Prinzessin.bmp",1, 695,587, 1230,915, $x14,$y14,50)
If $resulte13=1 Then
MouseClick("Left", $x14, $y14)
_Schatz()
_Stern()
Else
$resulte14= _ImageSearchArea("Schnee-Entdecker.bmp",1, 695,587, 1230,915, $x15,$y15,50)
If $resulte14=1 Then
MouseClick("Left", $x15, $y15)
_Schatz()
_Stern()
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
WEnd
EndFunc
Func _Exit()
exit
EndFunc
|
|
|
Similar Threads
|
AutoIt - ImageSearch
11/22/2013 - SRO Private Server - 0 Replies
#include <ImageSearch.au3>
$X = 0
$Y = 0
Func Start ()
$Search = _ImageSearch('Weapon.bmp', 0, $x, $y, 0)
if $Search = 1 Then
MouseMove($x, $y,10)
EndIf
|
[S] Autoit bot Imagesearch
07/31/2011 - Trading - 0 Replies
Hallo ich suche eine Möglichkeit peer Autoit ein bild auf meinen Bildschirm zu suchen.
Sollte Autoit dieses Bild gefunden haben Sollte nach Möglichkeit ein Farbiger Kasten um dieses Bild erscheinen.
Hier einmal das Bild
ImageShack® - Online Photo and Video Hosting
PUSH
|
Autoit ImageSearch
09/20/2009 - AutoIt - 10 Replies
moin Leuts,
hab ein problem mit einem Autoit ImageSearch Bot.Unzwar wenn ich den Bot starten erscheint er für ein bruchteil einer sec unten rechts iner taskleiste(da wo die uhr ist) dann schliest er sich wieder. Warum auch immer.
Hier mal der Script
HOTKEYSET("{F6}", "Start")
HotKeySet("{F5}", "Stop")
#include <ImageSearch.au3>
|
All times are GMT +1. The time now is 03:01.
|
|