Imagesearch pausieren bis WinKill das Window gekillt hat?

11/08/2013 15:52 NeverMeltIce.#1
Code:
While 1
				$image2 = _imagesearch("Findbattle.bmp", 1, $k, $l, 0)
				If $image2 = 1 Then
					MouseMove($k, $l, 1)
					MouseClick("left")
				EndIf
				$image = _imagesearch("FindbattleB2.bmp", 1, $y, $x, 0)
				If $image = 1 Then
					MouseMove($y, $x, 1)
					MouseClick("left")
				EndIf
				$image6 = _imagesearch("forfeit.bmp", 1, $n, $m, 0)
				If $image6 = 1 Then
				WinKill("Battling against")
					$zahl = $zahl + 1
					ToolTip("Battles lost: " & $zahl)
				EndIf
				Sleep(300)
			WEnd
(nicht der komplette Code)

Was passiert:

-Es klickt den Findbattle-Button
-Dann den 2.
-Das Battlewindow erscheint
-Es klickt wieder den Findbattle-Button, obwohl es zuerst mit Winkill das Battlewindow schließen sollte und dann erst von vorne beginnen soll.
Dadurch wird das Window nicht gekillt und gelangt einfach in den Hintergrund.

Lösung wäre das Battlewindow irgendwie vor dem Findbattle-Button erscheinen zu lassen, damit ImageSearch den Button erst nach Winkill findet. Funktioniert auch, ist aber sehr umständlich und dämlich. (Mit Sleep habe ich es auch schon versucht, kein Erfolg).


Ideen?
11/08/2013 16:00 snow21#2
hi du

vieleicht hilft dir das ja weiter

WinActive
[Only registered and activated users can see links. Click Here To Register...]

WinWaitActive
[Only registered and activated users can see links. Click Here To Register...]

Jedes fenster hat auch eine eigene ID darüber kannst du das auch einfacher regeln.
11/08/2013 16:02 alpines#3
Erstmal zur Codeoptimierung, man kann den Code um einiges kürzen
Code:
While 1
	If _ImageSearch("Findbattle.bmp", 1, $x, $y, 0) Then MouseClick("left", $x, $y)
	If _ImageSearch("FintBattleB2.bmp", 1, $x, $y, 0) Then MouseClick("left", $x, $y)
	If _ImageSearch("forfeit.bmp", 1, $x, $y, 0) Then
		WinKill("Battling against")
		$zahl += 1
		ToolTip("Battles lost: " & $zahl)
	EndIf
	Sleep(300)
WEnd
So sieht der Code doch schon viel sauberer aus.
Es kann sein das einige Fenster es verweigern sich schließen zu lassen, prüf erstmal ob das Fenster wirklich Battling against heißt oder es noch einen Text hat um die Wahrscheinlichkeit des Schließens zu erhöhen.
Du könntest noch Variablen einbauen die abspeichern wo es zuletzt war.
Wenn dein Problem ist das es zu schnell passiert, dann setz z.B. im 1. If eine Variable auf Findbattle oder ähnliches und lass _ImageSearch("Findbattle.bmp", ...) erst triggern wenn die Variable nach WinKill verändert wurde.
11/08/2013 16:05 NeverMeltIce.#4
Quote:
hi du

vieleicht hilft dir das ja weiter

WinActive
Function WinActive

WinWaitActive
Function WinWaitActive
WinWaitActive funktioniert nicht mit ImageSearch.

Quote:
Es kann sein das einige Fenster es verweigern sich schließen zu lassen, prüf erstmal ob das Fenster wirklich Battling against heißt oder es noch einen Text hat um die Wahrscheinlichkeit des Schließens zu erhöhen.
Habe Winkill mit "Battling against" schon ohne anderen Code getestet und es hat funktioniert.
Aber thx für die Vorschläge, werde ich mal versuchen.