|
You last visited: Today at 16:31
Advertisement
AutoIt_PixelSearch_Tut-fail_hilfe?
Discussion on AutoIt_PixelSearch_Tut-fail_hilfe? within the General Coding forum part of the Coders Den category.
05/24/2015, 13:10
|
#1
|
elite*gold: 0
Join Date: Apr 2010
Posts: 5
Received Thanks: 0
|
AutoIt_PixelSearch_Tut-fail_hilfe?
Hallo liebe User,
ich dachte mir, ich schreibe mal ein kleines Toturial, nur leider funktioniert mein Skript selber nicht :/ hoffentlich kann mir da jemand weiterhelfen?
Ich bin nicht gerade ein Profi in diesem Bereich und habe es auch schon mit ImageSearch probiert aber da komm ich noch weniger zurecht..=(
Der Bot soll einfach nur in 2 Bereichen ein Pixel suchen (linker Bereich/rechter Bereich), wenn es auftaucht soll er, je nach dem ob es im linken oder rechten Bereich ist, die linke oder rechte Pfeiltaste drücken.
lt. SyntaxCheck Prod gibt es zwar keinen Fehler (mehr) aber es funktioniert dennoch nicht. Hier mal der komplette Code:
-----------------------------------
HotKeySet ("{F4}","_Exit") ;F4 zum Beenden des Bots
HotKeySet ("{F3}","_Pause") ;F3 zum Pausieren des Bots
While 1
Sleep(1)
WEnd
$color1 = 0xFAF3E0 ;1. Farbe
$color2 = 0xFAF3E0 ;2. Farbe
$oben = 390 ;Feldgrenzen oben
$unten = 680 ;Feldgrenzen unten
$L_li = 875 ;Linkes Feld - Feldgrenze links
$L_re = 915 ;Linkes Feld - Feldgrenze rechts
$R_li = 1000 ;Rechtes Feld - Feldgrenze links
$R_re = 1050 ;Rechtes Feld - Feldgrenze rechts
$var1 = PixelSearch($L_li,$unten,$L_re,$oben,$color1,100,0 )
;Variablenausdruck 1
$var2 = PixelSearch($R_li,$unten,$R_re,$oben,$color2,100,0 )
;Variablenausdruck 2
While 1 ;Beginn der 1. Schleife
$var1 = PixelSearch($L_li,$unten,$L_re,$oben,$color1,100,0 )
If not @error Then ;wenn im 1. Feld das gesuchte Pixel erscheint, dann
Send ("{left}") ;drücke "Pfeil links"
Sleep(200)
EndIf ;Ende der Wenn-Funktion
$var2 = PixelSearch($R_li,$unten,$R_re,$oben,$color2,100,0 )
If not @error Then ;wenn im 2. Feld das gesuchte Pixel erscheint, dann
Send ("{right}") ;drücke "Pfeil rechts"
Sleep(200)
EndIf ;Ende der Wenn-Funktion
WEnd ;Ende der Schleife
Func _Exit() ;Definition des "HotKeySet" Exit - Beenden des Bots
Exit ;Bot beenden
EndFunc ;Ende der Funktions-Definition
Func _Pause()
While True
Sleep(1)
WEnd
Endfunc
----------------------------------------
Wie ihr sehen könnt habe ich (testweise) sogar die Toleranz für die Pixel auf 100 gesetzt - nichteinmal damit läuft es. Heißt für mich entfeder sucht er garnicht erst oder der Fehler liegt im Send-Befehl (was ist eher nicht glaube?).
Für eure Hilfe bei meinem 1. Tut wäre ich dankbar :-)
|
|
|
05/24/2015, 15:26
|
#2
|
elite*gold: 122
Join Date: May 2014
Posts: 2,721
Received Thanks: 532
|
"$var1 = PixelSearch($L_li,$unten,$L_re,$oben,$color1,100,0 )"
Kurze Frage. Die Zeile hast du 2x stehen.
Einmal:
"$var2 = PixelSearch($R_li,$unten,$R_re,$oben,$color2,100,0 )"
und einmal:
"$var2 = PixelSearch($R_li,$unten,$R_re,$oben,$color2,100,0 )
If not @error Then ;wenn im 2. Feld das gesuchte Pixel erscheint, dann"
Muss man nicht einfach bei $var2 = PixelSearch blabla If not @error
$var2 und danach If not @error
schreiben?
|
|
|
05/24/2015, 16:53
|
#3
|
elite*gold: 0
Join Date: Apr 2010
Posts: 5
Received Thanks: 0
|
Hallo Melli,
erstmal danke für deine Hilfe,
wie genau meinst du das?
Oben habe ich die var1 und 2 erwähnt (Definition für die beiden Felder)
weiter unter in der Schleife hab ich das jeweils nochmal geschrieben, weil es nicht funktioniert hat mit der Variable oben und unten dann ausschließlich
$var1 = PixelSearch
If not @error Then send ("{left}")
wie gesagt bin leider kein Profi in diesem Bereich
Habe auch versucht die Variable oben weg zu lassen, aber das hat auch nichts gebracht.
Sobald es funktioniert wollte ich das ganze dann aber auch sowieso von "verwirrenden Störfaktoren" befreien :-)
|
|
|
05/24/2015, 16:56
|
#4
|
elite*gold: 122
Join Date: May 2014
Posts: 2,721
Received Thanks: 532
|
Ah. Ja ok dachte schon.
Vielleicht liegt es auch einfach an den Variablen?
|
|
|
05/24/2015, 17:46
|
#5
|
elite*gold: 0
Join Date: Apr 2010
Posts: 5
Received Thanks: 0
|
Ich habe schon ne Menge durch probiert, auch alle Variablen aufgelöst und die Werte direkt eingesetzt, klappt leider nicht so recht :/
Ich habe in einigen Toturials auch Leute gefunden, die statt mit if not @error mit If IsArray = True arbeiten, nur leider bezogen sich diese alle auf "wenn x Pixel im Bereich y erscheint dann klicke mit der Maus drauf"
Auch das habe ich ausprobiert, aber bei Taste drücken klappt dies leider auch nicht :/
|
|
|
05/26/2015, 13:57
|
#6
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
1. Bessere Pause Funktion:
Code:
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc
2. Sleep(1) ist ziemlich wenig und verursacht unnötig CPU Auslastung. Du kannst auch Sleep(1000) benutzen. Ist besser für den PC und bringt genau das selbe. Ein Hotkey unterbricht den Sleep, daher brauchst du nicht so einen geringen.
3. Du hast $unten und $oben in PixelSearch vertauscht.
4. Ja, man sollte besser mit If IsArray($var1) prüfen, da die If @error Abfrage zu Fehlern führen kann
|
|
|
05/26/2015, 18:22
|
#7
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Vorallem bringt Sleep(1) eh nichts da AutoIt mindestens 10ms sleept.
Code:
$t = TimerInit()
Sleep(1)
ConsoleWrite("1: " & TimerDiff($t) & @CRLF)
$t = TimerInit()
Sleep(10)
ConsoleWRite("10: " & TimerDiff($t) & @CRLF)
Code:
1: 10.636155149119
10: 10.7468232715457
|
|
|
05/28/2015, 23:07
|
#8
|
elite*gold: 0
Join Date: Apr 2010
Posts: 5
Received Thanks: 0
|
Danke Moneypulation, danke für den Tipp, hab es so eingesetzt wie du sagtst
zu 3. nur zum Verständnis:
Wo hab ich das vertauscht?
1. Mein Au3Info zeigt mir an, dass oben links der 0-Punkt ist (was ich an sich auch unlogisch finde^^)
2. Ist das nicht "egal" in welcher Reihenfolge ich es eingebe? Drehe ich es um, so sucht er doch nur von unten nach oben statt von oben nach unten oder?
und auch danke für deinen Tipp alpines, nur leider *shame* kann ich damit nichts anfangen bzw. weiß nicht, was du mir damit zu sagen versuchst =(
Also das ganze läuft jetzt, zumindest zum Teil.
Suche ich mir ein Pixel z.B. im Browser und gebe das mit entsprechenden Koord. ein, läuft das ganze an, aber sobald das Pixel weg ist, stoppt er nicht :/
und 2. macht er nichts in dem Fenster, in dem er eigentlich etwas machen soll.
Habe auch versucht mit ControlSend weiter zukommen an dem Punkt hat es mir aber leider auch nicht sonderlich weitergeholfen :/
hier einmal der "neue" Code
; Script Start - Add your code below here
HotKeySet ("{F4}","_exit") ;F4 zum Beenden des Bots - Erwähnung des HotKeySet
HotKeySet ("{F3}","_pause") ;F3 zum Pausieren des Bots - Erwähnung des HotKeySet
Global $Paused
$t = 100 ;Sleep-Zeit
$color1 = 0xFD5E40 ;?
$color2 = 0xFD5E40 ;rot huhn kamm
$oben = 345 ;Feldgrenzen oben
$unten = 690 ;Feldgrenzen unten
$L_li = 875 ;Linkes Feld - Feldgrenze links
$L_re = 915 ;Linkes Feld - Feldgrenze rechts
$R_li = 1000 ;Rechtes Feld - Feldgrenze links
$R_re = 1040 ;Rechtes Feld - Feldgrenze rechts
$var1 = PixelSearch($L_li,$unten,$L_re,$oben,$color1,100,0 ) ;Variablenausdruck 1
$var2 = PixelSearch($R_li,$unten,$R_re,$oben,$color2,100,0 ) ;Variablenausdruck 2
While 1 ;Beginn der 1. Schleife
If IsArray ($var1) = True Then ;wenn im 1. Feld das gesuchte Pixel erscheint, dann
send ("{right}") ;drücke "Pfeil links"
Sleep($t)
EndIf ;Ende der Wenn-Funktion
If IsArray($var2) = True Then ;wenn im 2. Feld das gesuchte Pixel erscheint, dann
send ("{right}") ;drücke "Pfeil rechts"
Sleep($t)
EndIf ;Ende der Wenn-Funktion
WEnd ;Ende der Schleife
Func _Exit() ;Definition des "HotKeySet" Exit - Beenden des Bots
Exit ;Bot beenden
EndFunc ;Ende der Funktions-Definition
Func _pause()
$Paused = NOT $Paused
While $Paused
sleep($t * 10)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc
Hat jemand von euch vielleicht noch eine Idee?
Könnte es evtl. helfen, wenn ich die Koord. errechnen lasse oder ist das "Jacke wie Hose"? (ich vermute auf letzteres? :/ )
|
|
|
05/29/2015, 16:37
|
#9
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
Quote:
|
PixelSearch ( left, top, right, bottom, color [, shade-variation = 0 [, step = 1 [, hwnd]]] )
|
Laut deinen Variablennamen hast du erst den "unten parameter" und dann den "oben parameter" in die funktion geschrieben. Richtig ist es aber andersrum
Dass er nicht mehr stoppt, wenn der Pixel nicht mehr da ist, liegt daran, dass du garnicht mehr nach dem Pixel suchst, nachdem er 1x gefunden worden ist. Du musst die Zeile $var1 = PixelSearch($L_li,$unten,$L_re,$oben,$color1,100,0 ) vor die If-Abfrage stellen. Genauso mit $var2 vor dessen Abfrage
|
|
|
06/19/2015, 20:15
|
#10
|
elite*gold: 0
Join Date: Apr 2010
Posts: 5
Received Thanks: 0
|
Entschuldigung für die späte Rückmeldung, ich war leider für einige Zeit verhindert und habe auch einige Abende mit Ausdauer rumprobiert.
Nach langen Versuchen und herumprobieren ohne jegliche Form von Erfolg zu erkennen habe ich es schlussendlich aufgegeben, es will einfach nicht laufen :/
womöglich gibt es ja irgendwann mal jemanden, der ähnliche Probleme wie ich hat, diese jedoch lösen kann. Dieser Person wäre ich dann dankbar, wenn er hier vielleicht seinen Lösungsweg posten würde =)
Nichts desto trotz: vielen vielen lieben dank, an euch, die mir hier dennoch so freundlich weitergeholfen haben aber bei mir scheint leider Hopfen und Malz verloren =P dennoch danke =)
|
|
|
All times are GMT +1. The time now is 16:31.
|
|