|
You last visited: Today at 11:24
Advertisement
Autoit ImageSearch
Discussion on Autoit ImageSearch within the AutoIt forum part of the Coders Den category.
09/19/2009, 01:33
|
#1
|
elite*gold: 20
Join Date: Oct 2007
Posts: 610
Received Thanks: 1,247
|
Autoit ImageSearch
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>
Func START()
$x1 = 0
$y1 = 0
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
EndIf
EndFunc
$x1 = 0
$y1 = 0
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
If $findImage2 = 1 Then
Sleep (5000)
EndIf
Func STOP()
Exit
EndFunc
|
|
|
09/19/2009, 10:13
|
#2
|
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
|
Ohne auch nur die geringste ahnung von autoit zu haben, würd ich sagen, er findet das gesuchte nicht ;D
|
|
|
09/19/2009, 10:36
|
#3
|
elite*gold: 116
Join Date: Oct 2007
Posts: 677
Received Thanks: 248
|
Das Problem ist ganz einfach ;-) Wenn du das Script startest läuft er es einmal schnell durch und beendet wieder. Du musst es nur laufen lassen z.B. mit ner while schleife:
Quote:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
If $findImage2 = 1 Then
Sleep (5000)
EndIf
while 1
HOTKEYSET("{F6}", "Start")
HotKeySet("{F5}", "Stop")
sleep(25)
WEnd
Func START()
$x1 = 0
$y1 = 0
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
EndIf
EndFunc
Func STOP()
Exit
EndFunc
|
|
|
|
09/19/2009, 13:44
|
#4
|
elite*gold: 20
Join Date: Oct 2007
Posts: 610
Received Thanks: 1,247
|
Quote:
Originally Posted by bassbanane
Das Problem ist ganz einfach ;-) Wenn du das Script startest läuft er es einmal schnell durch und beendet wieder. Du musst es nur laufen lassen z.B. mit ner while schleife:
|
vielen dank es hat geklappt. jetz hätte ich noch ne frage unzwar kann man es so machen das der bot nur nach bild 2 (P) sucht nachdem er Bild 1 (L) gefunden hatt also so:
Bild 1 gefunden - suche nach bild 2 - bild 2 gefunden - sucht nicht mehr nach bild 2 - nach z.b 20 min bild 1 wieder gefunden - sucht wieder nach bild 2 - bild 2 gefunden -hört auf nach bild2 zu suchen .... und immer so weiter
ist das dann so richtig ?
#include <ImageSearch.au3>
while 1
HOTKEYSET("{F6}", "Start")
HotKeySet("{F5}", "Stop")
sleep(25)
WEnd
Func START()
$x1 = 0
$y1 = 0
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
Sleep (15000)
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
If $findImage2 = 1 Then
Sleep (5000)
EndIf
EndIf
EndFunc
Func STOP()
Exit
EndFunc
|
|
|
09/19/2009, 13:59
|
#5
|
elite*gold: 0
Join Date: Aug 2009
Posts: 57
Received Thanks: 9
|
ich weis nicht ob das richtig ist bin selbe rnewbie drin
aber wenn man image 1 (L ) udn image 2 (P9 in einzelne funcs packt O.o und nur image 1 in eine while schleife einbaut?
ps.: les dir bitte die tuts durch
|
|
|
09/19/2009, 14:46
|
#6
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
Habs zwar dein Problem net so ganz verstanden, aber vom ablauf her müsste/könnte es so funktionieren.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
While 1
Do
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
Sleep(100)
Until ($findImage1 = 1) Or ($findImage2 = 1)
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
Sleep (15000)
ElseIf $findImage2 = 1 Then
Sleep (5000)
EndIf
WEnd
Oder alternativ so.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
While 1
Do
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
Sleep(100)
Until $findImage1 = 1
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
Sleep (15000)
Do
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
Sleep(100)
Until $findImage2 = 1
If $findImage2 = 1 Then
Sleep (5000)
EndIf
EndIf
WEnd
|
|
|
09/19/2009, 15:25
|
#7
|
elite*gold: 20
Join Date: Oct 2007
Posts: 610
Received Thanks: 1,247
|
Quote:
Originally Posted by | Moep |
Habs zwar dein Problem net so ganz verstanden, aber vom ablauf her müsste/könnte es so funktionieren.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
While 1
Do
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
Sleep(100)
Until ($findImage1 = 1) Or ($findImage2 = 1)
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
Sleep (15000)
ElseIf $findImage2 = 1 Then
Sleep (5000)
EndIf
WEnd
Oder alternativ so.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
While 1
Do
$findImage1 = _ImageSearch("L", 1, $x1, $y1, 0)
Sleep(100)
Until $findImage1 = 1
If $findImage1 = 1 Then
Sleep (5000)
Send ("{enter}")
Sleep (2000)
Send ("123")
Sleep (1000)
Send ("{enter}")
Sleep (1000)
Send ("2009")
Send ("{enter}")
Sleep (20000)
Send ("{enter}")
Sleep (15000)
Do
$findImage2 = _ImageSearch("P", 1, $x1, $y1, 0)
Sleep(100)
Until $findImage2 = 1
If $findImage2 = 1 Then
Sleep (5000)
EndIf
EndIf
WEnd
|
Ich versuchs mal anders zu erklären.
Der Bot ist für ein Game gedacht.
BILD L = Ein teil des einloggbildschirms
BILD P = Ein teil des Ingame Bildschirms
Wenn ich ingame bin ist BILD P immer vorhanden
Also würde der bot If $findImage2 = 1 Then Sleep (5000) mehrmals machen er soll es aber nur einmal machen unzwar soll er nur nach BILD P suchen wenn er bild L gefunden hatt aber er soll nachdem er BILD P gefunden hatt wieder aufhören danach zu suchen und nur wieder anfangen wenn er BILD L wieder gefunden hatt
|
|
|
09/19/2009, 15:49
|
#8
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
Quote:
Originally Posted by 111222333444
Ich versuchs mal anders zu erklären.
Der Bot ist für ein Game gedacht.
BILD L = Ein teil des einloggbildschirms
BILD P = Ein teil des Ingame Bildschirms
Wenn ich ingame bin ist BILD P immer vorhanden
Also würde der bot If $findImage2 = 1 Then Sleep (5000) mehrmals machen er soll es aber nur einmal machen unzwar soll er nur nach BILD P suchen wenn er bild L gefunden hatt aber er soll nachdem er BILD P gefunden hatt wieder aufhören danach zu suchen und nur wieder anfangen wenn er BILD L wieder gefunden hatt
|
Dieser Algorithmus würde genau dem zweiten Script von mir entsprechen...
Edit: Probier doch einfach mal das ganze mit MsgBoxen zu debuggen
|
|
|
09/20/2009, 00:17
|
#9
|
elite*gold: 20
Join Date: Oct 2007
Posts: 610
Received Thanks: 1,247
|
hatt jetz soweit geklappt allerdings macht der bot nur die ersten if..endif schleife aber nicht die folgenen.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
$findImage3 = _ImageSearch("F.bmp", 1, $x1, $y1, 0)
while 1
Do
$findImage1 = _ImageSearch("L.bmp", 1, $x1, $y1, 0)
Until $findImage1 = 1
If $findImage1 = 1 Then
MouseMove (528, 520)
Sleep (1000)
MouseClick ("left")
sleep(1000)
Send ("123456")
Sleep(1000)
send ("{Enter}")
Send ("123456")
Sleep(1000)
send ("{Enter}")
EndIf
WEnd
While 2
Do
$findImage2 = _ImageSearch("C.bmp", 1, $x1, $y1, 0)
Until $findImage2 = 1
If $findImage2 = 1 Then
send ("{Enter}")
ElseIf $findImage3 = 1 Then
send ("{Enter}")
send ("{Enter}")
EndIf
WEnd
While 3
do
$findImage4 = _ImageSearch("P.bmp", 1, $x1, $y1, 0)
Until $findImage4 = 1
If $findImage4 = 1 Then
$coord = PixelSearch ( 471 , 266 , 529 , 342 , 0x2A3333 )
mousemove($coord[0],$coord[1])
sleep (2000)
MouseClick ( "left" )
EndIf
WEnd
|
|
|
09/20/2009, 10:14
|
#10
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
Quote:
Originally Posted by 111222333444
hatt jetz soweit geklappt allerdings macht der bot nur die ersten if..endif schleife aber nicht die folgenen.
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
$findImage3 = _ImageSearch("F.bmp", 1, $x1, $y1, 0)
while 1
Do
$findImage1 = _ImageSearch("L.bmp", 1, $x1, $y1, 0)
Until $findImage1 = 1
If $findImage1 = 1 Then
MouseMove (528, 520)
Sleep (1000)
MouseClick ("left")
sleep(1000)
Send ("123456")
Sleep(1000)
send ("{Enter}")
Send ("123456")
Sleep(1000)
send ("{Enter}")
EndIf
WEnd
While 2
Do
$findImage2 = _ImageSearch("C.bmp", 1, $x1, $y1, 0)
Until $findImage2 = 1
If $findImage2 = 1 Then
send ("{Enter}")
ElseIf $findImage3 = 1 Then
send ("{Enter}")
send ("{Enter}")
EndIf
WEnd
While 3
do
$findImage4 = _ImageSearch("P.bmp", 1, $x1, $y1, 0)
Until $findImage4 = 1
If $findImage4 = 1 Then
$coord = PixelSearch ( 471 , 266 , 529 , 342 , 0x2A3333 )
mousemove($coord[0],$coord[1])
sleep (2000)
MouseClick ( "left" )
EndIf
WEnd
|
Du hast mit "while 1" ja auch ne Schleife dessen Bedingung immer erfüllt ist. Du könntest auch schreiben "while true" oder "while 1=1". Ergo ist es eine Endlosschleife ohne Abbruchbedingung und das Script wird deshalb diese auch nie verlassen, um sich z.B. anzuschauen was in den anderen Schleifen so los ist. Um einen Schleifenabbruch zu erzwingen könntest du sie mit "exitloop" abbrechen...
Oder du benutzt einfach das Schema was ich dir in meinem zweiten Script gegeben hab. Dort wartet das Script nacheinander auf bestimmte Zustände und führt danach eine Aktion aus.
Hast du das ganze eigentlich mal mit msgboxen gedebuggt, um ein Gefühl dafür zu bekommen wie sich der code bewegt?!
|
|
|
09/20/2009, 13:47
|
#11
|
elite*gold: 20
Join Date: Oct 2007
Posts: 610
Received Thanks: 1,247
|
Aber wenn ichs nach deinem zweitem schma aufbaue sucht er nur einmal danach dasheist er macht alles nur einmal er soll es aber "immer"machen.
Z.b werde ich einmal gekickt der bot logt mich wieder ein und macht das was im bot steht. dann werde ich wieder gekickt dann soll der bot mich wieder einloggen ...usw.
Die Befehle zwischen Do und Until werden ausgeführt, bis der Ausdruck wahr ist. (also nur einmal ?)
Ne hab noch keine msgbox gemacht wieso denn?
Code:
#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
While 1
Do
$findImage1 = _ImageSearch("L.bmp", 1, $x1, $y1, 0)
Sleep(100)
Until $findImage1 = 1
If $findImage1 = 1 Then
MouseMove (528, 520)
Sleep (1000)
MouseClick ("left")
sleep(1000)
Send ("123456")
Sleep(1000)
send ("{Enter}")
Send ("123123")
Sleep(1000)
send ("{Enter}")
Do
$findImage2 = _ImageSearch("C.bmp", 1, $x1, $y1, 0)
Until $findImage2 = 1
If $findImage2 = 1 Then
send ("{Enter}")
ElseIf $findImage3 = 1 Then
send ("{Enter}")
send ("{Enter}")
EndIf
Do
$findImage4 = _ImageSearch("P.bmp", 1, $x1, $y1, 0)
Until $findImage4 = 1
If $findImage4 = 1 Then
$coord = PixelSearch ( 471 , 266 , 529 , 342 , 0x2A3333 )
mousemove($coord[0],$coord[1])
sleep (2000)
MouseClick ( "left" )
EndIf
EndIf
WEnd
so wäre es doch richtig aber hier bei macht er auch nur das erste
|
|
|
 |
Similar Threads
|
[How To] AutoIt ImageSearch ( am Metin2 Beispiel )
01/16/2015 - Coding Tutorials - 71 Replies
Hi,
Ich hab mich mal Hingesetzt und nen Video-TuT über die ImageSearch Funktion in AutoIt gemacht, da diese vielen nicht bekannt ist!
Ein kleiner Programmier Fehler ist drin, aber die Imagesearch Funktioniert.
Hab das Video Nachts um 3.30 Uhr gemacht.
So hier das Video:
YouTube - AutoIt ImageSearch
|
[GUIDE] AutoIt ImageSearch
10/18/2009 - Metin2 Guides & Templates - 14 Replies
Ein sehr praktischer Befehl in AutoHotkey: ImageSearch. (http://www.autohotkey.com/docs/commands/ImageSear ch.htm)
Was macht der Befehl?- er sucht den ganzen Bildschrim nach einem Vorgegebenen Bild ab. Vielleicht auch Nützlich für den Angelbot, weil die Leute nicht mehr Pixel suchen müsen, sondern nuch noch Screens machen müssen!
Diesen Befehl gibt es auch für AutoIt!
_________________________________________________ ___________________________
. Kopiere die ImageSearchDLL.dll in...
|
Autoit Problem: imagesearch in metin2
07/29/2009 - AutoIt - 5 Replies
tach
Ich hab ein problem mit der imagesearch funktion(muss man erst icluden) und zwar das Bild was ich suchen möchte( teil vom namen der gemsichi )
findet er auf dem Desktop, er findet es wen ich es mit der Vorschau öffne, wenn ich es mit paint öffne aber nicht im Metin2 fentser. woran kann das liegen?
|
autoit pixelsearch bzw imagesearch
02/04/2009 - General Coding - 0 Replies
hi leute,
ich hab mir nen bot mit autoit programmiert. Es ist n Browsergame, das auf Flash basiert. Ich habe Imagesearch benutzt und alles funkzt prima.
Das Problem:
Der Pc ist immer besetzt, wenn ich botte...
Also meine Frage: Gibts da ne alternative zu ImageSearch, die auch in minimierten Fenstern funktioniert?
|
All times are GMT +1. The time now is 11:25.
|
|