Problem mit Script

12/13/2013 15:52 RF1T2#1
Hallo,

habe ein Problem mit einem Script welches leider nur teilweise funktioniert.
Es hakt bei Select. Alles was sich zwischen Select und Endselect befindet
wird ignoriert da ich etwas falsch gemacht habe. Vllt wird es ja auch nicht
ignoriert jedenfalls wird nicht auf die entsprechende Farbe geklickt.

Da es sonst zu lang werden würde poste ich nur einen Teil des Scripts:

Code:
#include <GUIConstantsEx.au3>

GUICreate("Part1", 500, 100)
GUICtrlCreateLabel("[F1] - Start", 8, 8)
GUICtrlCreateLabel("[ESC] - Ende", 8, 48)
GUISetState(@SW_SHOW)

HotKeySet("{F1}", "Start")
HotKeySet("{ESC}", "Ende")

While 1
	Sleep(500)
WEnd

Func Ende()
	Exit
EndFunc



Func Start()
	$PixelPosColorMark = PixelSearch(38 ,119 ,809 ,602 ,0x0B39FF ,4 )
	$PixelPosColorBanker = PixelSearch(38 ,119 ,809 ,602 ,0x31264A ,4 )



	MouseClick("Left",845, 267)

	Sleep(2000)


(......)
	

	MouseClick("Left",1013, 200)

	Sleep(10000)



	Select

	Case	IsArray($PixelPosColorMark)
			MouseClick("left", $PixelPosColorMark[0], $PixelPosColorMark[1], 1, 0)
	EndSelect

	Sleep(5000)


	Select

	Case	IsArray($PixelPosColorBanker)
			MouseClick("left", $PixelPosColorBanker[0], $PixelPosColorBanker[1], 1, 0)
	EndSelect

	Sleep(3000)

	Send("{Space}")

(......)

	Sleep(30000)


EndFunc
Ideen?
Danke fürs lesen
12/13/2013 16:18 butter123#2
select case brauch wie if eine abfrage, die True oder false liefert. schau dir das doch mal in der hilfe an (google oder f1 in scite)
12/13/2013 17:01 RF1T2#3
Sicher?
Denn ich habe auch dieses Script welches funktioniert:

Code:
Func Start()
While 1
	$PixelPos = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xD9D9BD, 0)




	Select
	Case	IsArray($PixelPos)
			MouseClick("left", $PixelPos[0], $PixelPos[1], 1, 0)
			Sleep(35000)

	Send	("{left}")


	EndSelect
WEnd
EndFunc
12/13/2013 17:35 butter123#4
isarray liefert auch true oder false zurück ;)
12/13/2013 18:29 RF1T2#5
Aber wo liegt der Unterschied zwischen den beiden Beispielen?
12/13/2013 19:24 butter123#6
ohh sorry peinlich, hab ich wohl nicht genau gelesen.
weiß spontan dann nicht worans liegt. probiers vllt mit ner if abfrage anstatt select
12/13/2013 20:02 alpines#7
Select kann er schon verwenden dann müsste er aber folgendes verwenden
Code:
Select
	IsArray($a) = 1
Eine If-Abfrage bietet sich aber besser an
Code:
If IsArray($a) Then ;...
12/13/2013 21:14 RF1T2#8
Ich werds mal ausprobieren danke
12/13/2013 21:19 alpines#9
Switch würde sogar auch funktionieren, da würde es so aussehen
Code:
Switch IsArray($a)
	Case 1
		;Wenn es ein Array ist.

	Case 0
		;Wenn es kein Array ist.
EndSwitch
hier als Select
Code:
$iResult = IsArray($a)

Select
	Case $iResult = 1
		;Wenn es ein Array ist.

	Case $iResult = 0
		;Wenn es kein Array ist.
EndSelect
und zuletzt als If
Code:
If IsArray($a) Then
	;Wenn es ein Array ist.
Else
	;Wenn es kein Array ist.
EndIf
Es gibt verschiedene Möglichkeiten die Verzweigungen zu verwenden, aber bei IsArray würde ich auf jeden Fall die If-Verzweigung nutzen.
12/13/2013 22:41 RF1T2#10
Mit If hats geklappt, danke :)

Kurze Frage vllt noch:
Ist es möglich das Script, falls "Else" die Antwort ist, erst etwas
machen zu lassen z.B. einen Klick und danach wieder zurückgehen
zu lassen zu dem Punkt an dem die If Abfrage beginnt?
12/13/2013 22:46 .Ghost.#11
Kann dich per Skype melden.
12/13/2013 23:07 KDeluxe#12
Quote:
Originally Posted by RF1T2 View Post
Mit If hats geklappt, danke :)

Kurze Frage vllt noch:
Ist es möglich das Script, falls "Else" die Antwort ist, erst etwas
machen zu lassen z.B. einen Klick und danach wieder zurückgehen
zu lassen zu dem Punkt an dem die If Abfrage beginnt?
Einfach weitere Bedingungen verwenden (sofern nötig) und die Schleife durchlaufen lassen. Einen "goto" Befehl gibt es in AutoIt nicht.
12/15/2013 07:06 Claiver#13
Quote:
Originally Posted by RF1T2 View Post
Mit If hats geklappt, danke :)

Kurze Frage vllt noch:
Ist es möglich das Script, falls "Else" die Antwort ist, erst etwas
machen zu lassen z.B. einen Klick und danach wieder zurückgehen
zu lassen zu dem Punkt an dem die If Abfrage beginnt?
Jaa ist möglich :D

Code:
Func _Array()
If IsArray($a) Then
	;Wenn es ein Array ist.
Else
	;Wenn es kein Array ist.
        MouseClick("left",0,0,1,1)
        _Array()
EndIf
EndFunc
Dann musst du aber noch irgendwo in deinem Script
Code:
_Array()
einfügen außer du machst es mit einem
Code:
HotKeySet("{F5}","_Array"
das heißt wenn du F5 drückst wird _Array abgespielt... und wenn du einfachso _Array() schreibst wird es einfachso abgespielt.
Wenn du willst das es erst passiert wenn man einen Button drückt musst du bei
Code:
Case $Button1
_Array()
einfügen :))
12/15/2013 22:33 RF1T2#14
Quote:
Originally Posted by Claiver View Post
Jaa ist möglich :D

Code:
Func _Array()
If IsArray($a) Then
	;Wenn es ein Array ist.
Else
	;Wenn es kein Array ist.
        MouseClick("left",0,0,1,1)
        _Array()
EndIf
EndFunc
(...)

DANKE!
Funktionert gut
12/15/2013 22:38 alpines#15
Code:
Func _Array()
If IsArray($a) Then
	;Wenn es ein Array ist.
Else
	;Wenn es kein Array ist.
        MouseClick("left",0,0,1,1)
        _Array()
EndIf
EndFunc
Recursion-Error missile launched. Impact in 3, 2, 1...
Ich würde die Funktion anders formulieren.