Pixelsearch Problem

02/24/2013 22:51 FoGzone#1
Also ich versuche hier gerade ein kleines Tool zu schreiben und habe folgendes Problem:
Es soll in einem Bereich nach einer bestimmten Farbe gesucht werden. Wird die Farbe gefunden, soll er auf Feld1 klicken. Wird die Farbe nicht gefunden, soll er auf Feld2 drücken.
Das Ganze sieht momentan so aus:

Code:
Func _Start()

	$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
	$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

	$suchebild1 = _imagesearcharea('bild1.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
	$suchebild2 = _imagesearcharea('bild2.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

	If $suchemute & $suchestab = 0 Then
		MsgBox(0,"Error","Abgebrochen")
	EndIf


	While 1

	$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,2)
	Sleep(1000)

	If not @error Then
		MouseMove($mx,$my,1)
		MouseClick("left",$mx,$my,1,0)
		Sleep(1000)
		MouseClick("left",$mx,$my,1,0)
		Return
	EndIf

	If @error Then
		MouseMove($sx,$sy,1)
		MouseClick("left",$sx,$sy,1,0)
		Sleep(100)
		MouseClick("left",$sx,$sy,1,0)
		Return
	EndIf
WEnd

EndFunc
Er läuft also den Loop einmal durch aber reagiert nicht auf die Veränderung in dem Pixelsearch Bereich :(
02/25/2013 14:04 YatoDev#2
Code:
-Start()

Func _Start()

	$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
	$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

	$suchebild1 = _imagesearcharea('bild1.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
	$suchebild2 = _imagesearcharea('bild2.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

	If $suchemute & $suchestab = 0 Then ; ?????
		MsgBox(0,"Error","Abgebrochen")
	EndIf


While 1

	$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,2)
	Sleep(1000) ; wofür ? verursacht nur fehler

	If not @error Then
		MouseMove($mx,$my,1)
		MouseClick("left",$mx,$my,1,0)
		Sleep(1000)
		MouseClick("left",$mx,$my,1,0)
		;Return musst du anders lösen
	Else
		MouseMove($sx,$sy,1)
		MouseClick("left",$sx,$sy,1,0)
		Sleep(100)
		MouseClick("left",$sx,$sy,1,0)
		;Return musst du anders lösen außerdem steht nichtmal bei was 
                ;er soll z.b. Return 1
	EndIf
WEnd
EndFunc
02/25/2013 20:03 FoGzone#3
wie kann ich es also lösen dass er es folgender maßen macht:

Pixelsearch (Überprüfung ob der Bereich noch der Farbe entspricht)
Bei Farbe "Ok" auf Feld1 klicken
Bei Farbe "falsch" Feld2 klicken
Pixelsearch
Bei Farbe "falsch" Feld2 klicken
Bei Farbe "Ok" auf Feld1 klicken
Pixelsearch

Momentan erkennt er zwar am anfang die Farbe, aber anscheinend macht er danach nicht nochmal Pixelsearch

Das Ganze halt in nem Loop
02/25/2013 20:28 YatoDev#4
Code:
_Start()

Func _Start()

$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

$suchebild1 = _imagesearcharea('bild1.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
$suchebild2 = _imagesearcharea('bild2.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

If $suchemute & $suchestab = 0 Then ; ?????
	MsgBox(0,"Error","Abgebrochen")
EndIf

While 1
	$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,2)
	Sleep(1000) ; wofür ? verursacht nur fehler
	If not @error Then
		MouseMove($mx,$my,1)
		MouseClick("left",$mx,$my,1,0)
		Sleep(1000)
		MouseClick("left",$mx,$my,1,0)
		;Return musst du anders lösen
	Else
		MouseMove($sx,$sy,1)
		MouseClick("left",$sx,$sy,1,0)
		Sleep(100)
		MouseClick("left",$sx,$sy,1,0)
		;Return musst du anders lösen außerdem steht nichtmal bei was 
                ;er soll z.b. Return 1
	EndIf
WEnd
EndFunc
soll er 2 mal pixelsearch machen und das in einer while schleife oder soll eine andere func aufgerudfen werden wenn das 1 pixelsearch beendet wird ?
02/25/2013 20:36 FoGzone#5
Quote:
Originally Posted by ~ⓜⓐⓢⓣⓔⓡ~ View Post
Code:
_Start()

Func _Start()

$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

$suchebild1 = _imagesearcharea('bild1.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
$suchebild2 = _imagesearcharea('bild2.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

If $suchemute & $suchestab = 0 Then ; ?????
	MsgBox(0,"Error","Abgebrochen")
EndIf

While 1
	$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,2)
	Sleep(1000) ; wofür ? verursacht nur fehler
	If not @error Then
		MouseMove($mx,$my,1)
		MouseClick("left",$mx,$my,1,0)
		Sleep(1000)
		MouseClick("left",$mx,$my,1,0)
		;Return musst du anders lösen
	Else
		MouseMove($sx,$sy,1)
		MouseClick("left",$sx,$sy,1,0)
		Sleep(100)
		MouseClick("left",$sx,$sy,1,0)
		;Return musst du anders lösen außerdem steht nichtmal bei was 
                ;er soll z.b. Return 1
	EndIf
WEnd
EndFunc
soll er 2 mal pixelsearch machen und das in einer while schleife oder soll eine andere func aufgerudfen werden wenn das 1 pixelsearch beendet wird ?
Wird über einen Hotkey aufgerufen
[Loop]
Pixelsearch
Farbe vorhanden klick 2x auf Feld1
Farbe nicht vorhanden klick 2x auf Feld2
[/Loop]

So soll es aussehen

Momentan macht er einfach nur den Pixelsearch und klickt dann dauerhaft auf Feld1
02/25/2013 20:50 YatoDev#6
Code:
Func _Start()
#cs
$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

$suchebild1 = _imagesearcharea('bild1.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
$suchebild2 = _imagesearcharea('bild2.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

If $suchemute & $suchestab = 0 Then ; ?????
	MsgBox(0,"Error","Abgebrochen")
EndIf
#ce
;den teil kommentier ich mal aus da der beim pixelsearch erst nicht stört oder ;?
While 1
	$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,2)
	Sleep(1000) ; wofür ? verursacht nur fehler
	If not @error Then
		MouseMove($mx,$my,1)
		MouseClick("left",$mx,$my,1,0)
		Sleep(1000)
		MouseClick("left",$mx,$my,1,0)
		;Return musst du anders lösen
	Else
		MouseMove($sx,$sy,1)
		MouseClick("left",$sx,$sy,1,0)
		Sleep(100)
                MouseClick("left",$sx,$sy,1,0)
		;Return musst du anders lösen außerdem steht nichtmal bei was 
                ;er soll z.b. Return 1
	EndIf
WEnd
EndFunc
hab grad kein scite installiert ich kann nix überprüfen aber tu doch mal in jede zeile : consolewrite("1") consolewrite("2") consolewrite("3")überprüf bitte ob das so richtig ist und lass es mit console compilen bzw einfach in scite run . damit du siehst wo das programm stoppt
02/25/2013 21:05 FoGzone#7
Doch den oberen Part brauchst du, da die Bilder die dort gesucht werden, die Felder sind, auf die nach dem Pixelsearch geklickt werden.

So sieht das aus:

Was der Code momentan macht:
- Sucht die Bilder
- Pixelsearch
- da Farbe erkannt, klickt er 2x auf Feld1 und das passiert dann im Loop.

Entweder erkennt er es nicht, dass sich die Farbe geändert hat, oder er klickt halt andauernd

edit: habs jetzt gelöst!!!
ich hab einfach die 2 bedingungen umgedreht und eine andere farbe genommen
02/25/2013 21:38 YatoDev#8
Code:
Func _Start()
$Xstabbar2 = GuiCtrlRead($Xstabbar) + 5
$Ystabbar2 = GuiCtrlRead($Ystabbar) + 2

$suchemute = _imagesearcharea('mute.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$mx,$my,100)
$suchestab = _imagesearcharea('stab.png',1,GuiCtrlRead($OLX),GuiCtrlRead($OLY),GuiCtrlRead($URX),GuiCtrlRead($URY),$sx,$sy,100)

While 1
$stabbar = PixelSearch($Xstabbar,$Ystabbar,$Xstabbar2,$Ystabbar2,0xFFAAAA,0)
	If Not @error Then
			MouseMove($mx,$my,1)
			MouseClick("left",$mx,$my,1,0)
			Sleep(1000)
			MouseClick("left",$mx,$my,1,0)
		Else
			MouseMove($sx,$sy,1)
			MouseClick("left",$sx,$sy,1,0)
			Sleep(1000)
			MouseClick("left",$sx,$sy,1,0)
	EndIf
WEnd
EndFunc
Ich find es so trotzdem noch übersichtlicher ^^ ich machs halt immer so
für was brauchst du das denn ?