Case oder For oder While?

06/16/2011 01:53 Vierus.exe#1
Hallo,
ich bräuchte mal eure Hilfe ich möchte das:
wenn $a = Bild1 drücke $Button[5] und wenn $a = Bild2 drücke $Button[1] und so weiter ist.
Wie mache ich das am besten mit Case oder For oder While?:handsdown:
Ausserdem Aktiviert er mir das Fenster CLASS:TFCB nicht warum?
MfG Vierus
Code:
#include <string.au3>
#include <ImageSearch.au3>
#include <Array.au3>
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         Vierus

 Script Function:
 Auf 1 oder 2 oder 3 oder 4 oder 5 Klicken
#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
WinActivate("[CLASS:TFCB]")
Sleep (2000)
WinWaitActive("[CLASS:TFCB]")
Sleep (2000)
WinActivate("[CLASS:TSplashScreen]")
Sleep (2000)
WinWaitActive("[CLASS:TSplashScreen]")
Sleep (2000)

Dim $Bild[5] ; Array wird definiert
$Bild[0] = "1.bmp" ; bei 0 wird begonnen
$Bild[1] = "2.bmp"
$Bild[2] = "3.bmp"
$Bild[3] = "4.bmp"
$Bild[4] = "5.bmp"

_ArrayDisplay( $Bild, "Bild array" )

Dim $Button[5] ; Array wird definiert
$Button[0] = "5" ; bei 0 wird begonnen
$Button[1] = "4"
$Button[2] = "3"
$Button[3] = "2"
$Button[4] = "1"

_ArrayDisplay( $Button[, "Button array" )

$x1=0
$y1=0
$i=5

$result = _ImageSearch($Bild[$a],1,$x1,$y1,0)
	if $result=1 Then
		MsgBox(0, "Der Wert ist:", $a)
	EndIf

;~ wenn $a = Bild1 drücke $Button[5] und wenn $a = Bild2 drücke $Button[1] und so weiter

WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
Sleep (2000)
Send("{ENTER}")
	MsgBox(0,"Found",$b)


Exit
06/16/2011 02:05 Reeek#2
definitiv switch... weiterhin hast du im Code nur WinWaitActive, du musst aber noch den eigentlichen Aktivierungsbefehl, also WinActivate, dazumachen.
06/16/2011 02:17 Vierus.exe#3
Hallo Reeek
Danke
Dann muss ich aber jeden einzelnen Button Deklarieren oder?
und WinActivate meinste hier
WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
oder?

Ich meinte aber das hier geht nicht:
WinActivate("[CLASS:TFCB]")
warum?

MfG Vierus
06/16/2011 02:23 Reeek#4
also switch = Case, falls du das nicht wissen solltest.

Struktur:
PHP Code:
Switch <expression>
    Case <
value> [To <value>] [,<value> [To <value>] ...]
        
statement1
        
...
    [Case <
value> [To <value>] [,<value> [To <value>] ...]
        
statement2
        
...]
    [Case Else
        
statementN
        
...]
EndSwitch 
und das mit dem WinActivate hab' ich falsch gesehen, hab den Code nur überflogen und in einer der letzten Zeilen ein einsames WinWaitActivate gesehen... bin mir nicht ganz sicher, ob du diesen gemeint hast, aber ich meinte diesen:


WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])

Ferner kann ich dir noch sagen, dass du die 2-sek-sleeps am Anfang rausnehmen kannst, da WinWaitActivate ja als Sleep fungiert...
06/16/2011 10:32 lolkop#5
ich verstehe deine logik nicht so ganz...

Code:
$Bild[1] -> $Button[5]
$Bild[2] -> $button[1]
du solltest dir vielleicht einmal eine andere struktur überlegen.

sobald man mit arrays arbeitet, arbeitet man im normalfall nichtmehr mit switch case abfragen, sondern mit einer combo aus for-schleife und if-abfragen

dazu legst du dir am besten eine struktur an wie:
Code:
$Bild[x] -> $Button[x]
so kannst du in 3 zeilen beliebig viele abfragen realisieren =)
06/16/2011 14:19 Reeek#6
das stimmt, um das Array zu bestimmen eignet sich eine For-Schleife... aber um dann das eigentliche Programm auszuführen, ist eine Switch/Case Schleife besser, wenn du mich fragst.
06/16/2011 15:56 Vierus.exe#7
Ahh macht mich ruig wirrig im Kopf lol
Ich habe bis jetzt nur in VB und Batch Programmiert und dies soll mein erstes Programm werden, wie meinst du das mit den Arrays in einer For/If schleife.
Bitte macht doch mal nen kleines Beispiel in Deutsch und gut lesbar für Noops.

Code:
WinActivate("[CLASS:TFCB]")
Sleep (2000)
WinWaitActive("[CLASS:TFCB]")
Sleep (2000)
WinActivate("[CLASS:TSplashScreen]")
Sleep (2000)
WinWaitActive("[CLASS:TSplashScreen]")
Sleep (2000)

Dim $Bild[5] ; Array wird definiert
$Bild[0] = "1.bmp" ; bei 0 wird begonnen
$Bild[1] = "2.bmp"
$Bild[2] = "3.bmp"
$Bild[3] = "4.bmp"
$Bild[4] = "5.bmp"

_ArrayDisplay( $Bild, "Bild array" )

Dim $Button[5] ; Array wird definiert
$Button[0] = "5" ; bei 0 wird begonnen
$Button[1] = "4"
$Button[2] = "3"
$Button[3] = "2"
$Button[4] = "1"

_ArrayDisplay( $Button, "Button array" )

$x1=0
$y1=0

$result = _ImageSearch($Bild[$a],1,$x1,$y1,0)
Switch
	Case
	if $result=1 Then
		MsgBox(0, "Der Wert ist:", $a)
	EndIf
Case
	if $a=0 Then
		$b=0
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	Case
	if $a=1 Then
		$b=1
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	Case
	if $a=2 Then
		$b=2
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	Case
	if $a=3 Then
		$b=3
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	Case
	if $a=4 Then
		$b=4
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	Case
	if $a=5 Then
		$b=5
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndIf
	EndSwitch
;~ wenn $a = Bild1 drücke $Button[5] und wenn $a = Bild drücke $Button[1] und so weiter
Exit
Thx Vierus
06/16/2011 18:57 Reeek#8
PHP Code:
Dim $Bild[5] ; Array wird definiert
$Bild
[0] = "1.bmp" bei 0 wird begonnen
$Bild
[1] = "2.bmp"
$Bild[2] = "3.bmp"
$Bild[3] = "4.bmp"
$Bild[4] = "5.bmp" 
statt dessen schreibst du:

PHP Code:
Dim $Bild[5] ; Array wird definiert
For $i 0 to 4 Step 1
$Bild
[$i] = $i ".bmp"
Next 
leider weiß ich nicht, was dein Script machen soll und kann dir daher nur sehr allgemeine Tipps geben. Klär' uns mal bitte auf, warum du das Programm schreibst.
06/16/2011 21:15 Vierus.exe#9
Ganz einfach ich habe ein Programm das mich beim Start mit einer Abfrage nervt so das ich immer je nach Angezeigtem Text ein Button drücken muss.
Hier mal der Button wenn der Text 5 ist muss ich Button 5 Drücken:
Code:
>>>> Window <<<<
Title:	
Class:	TSplashScreen
Position:	528, 630
Size:	500, 200
Style:	0x96000000
ExStyle:	0x00010000
Handle:	0x0002026E

>>>> Control <<<<
Class:	TColorButtonNF
Instance:	5
ClassnameNN:	TColorButtonNF5
Name:	
Advanced (Class):	[CLASS:TColorButtonNF; INSTANCE:5]
ID:	114492144
Text:	1
Position:	55, 156
Size:	50, 22
ControlClick Coords:	22, 16
Style:	0x5401000B
ExStyle:	0x00000000
Handle:	0x06D302F0

>>>> Mouse <<<<
Position:	605, 802
Cursor ID:	0
Color:	0x6576A2

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
5
4
3
2
1


>>>> Hidden Text <<<<
Mit ControlClick hab ich das nicht hin bekomm.:confused:

MfG
Vierus
06/16/2011 21:52 lolkop#10
leider verstehe ich immer noch nicht was das programm machen soll...

dein code oben ist leider so unübersichtlich geschrieben, das ich nichteinmal erahnen kann was zu tun ist
06/16/2011 22:16 Vierus.exe#11
[Only registered and activated users can see links. Click Here To Register...]

So sieht es aus in den 1-5.bmp sind die Zahlen 1-5 als Bild das Funktioniert auch.
Vielleicht wirds jetzt klarer.:cool:
06/17/2011 17:20 Reeek#12
:o da würde ich es aber GANZ anders angehen... ich nehme an, du willst eine Art Bot schreiben?

Ich würde per Pixel/Imagesearch die Zahl rausfinden und dann dementsprechend die Maus klicken lassen...
06/18/2011 17:56 Vierus.exe#13
das mach ich doch mit Imagesearch

Code:
WinActivate("[CLASS:TFCB]")
Sleep (2000)
WinWaitActive("[CLASS:TFCB]")
Sleep (2000)
WinActivate("[CLASS:TSplashScreen]")
Sleep (2000)
WinWaitActive("[CLASS:TSplashScreen]")
Sleep (2000)

Dim $Bild[5] ; Array wird definiert
$Bild[0] = "1.bmp" ; bei 0 wird begonnen
$Bild[1] = "2.bmp"
$Bild[2] = "3.bmp"
$Bild[3] = "4.bmp"
$Bild[4] = "5.bmp"

_ArrayDisplay( $Bild, "Bild array" )

Dim $Button[5] ; Array wird definiert
$Button[0] = "5" ; bei 0 wird begonnen
$Button[1] = "4"
$Button[2] = "3"
$Button[3] = "2"
$Button[4] = "1"

_ArrayDisplay( $Button, "Button array" )

$x1=0
$y1=0






While 1
	$a=+1
	$result = _ImageSearch($Bild[$a],1,$x1,$y1,0)
	If $result=1 Then
		MsgBox(0, "Der Wert ist:", $a)
		EndIf
		WEnd
		
		
Select
    Case $a=0
		$b=0
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	Case $a=1
		$b=1
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	Case $a=2
		$b=2
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	Case $a=3
		$b=3
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	Case $a=4
		$b=4
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	Case $a=5
		$b=5
		WinWaitActive("[CLASS:TSplashScreen]",$Button[$b])
        Sleep (2000)
        Send("{ENTER}")
	    MsgBox(0,"Drücke",$b)
	EndSelect
;~ wenn $a = Bild1 drücke $Button[5] und wenn $a = Bild drücke $Button[1] und so weiter
Exit
aber ich krieg die Definition der schleife nicht raus wie das aus sehen muss.
06/18/2011 18:30 Reeek#14
verstehe dein Script leider nicht :(
so würde ich es mache:

in 1.bmp, 2.bmp, 3.bmp etc... sind die Bilder von der Zahl im Label, also NICHT die Buttons, sondern nur die Zahl!
bei den MouseClicks müssen die X- und Y-Koordinaten durch die Koordinaten des Fensters getauscht werden.

PHP Code:
#include <imagesearch.au3>
HotkeySet("{F11}""_search")

Func _search()
For 
$i 1 to 5 step 1
$result 
ImgSearch(@ScriptDir $i ".bmp"1005)
If 
$result <> 0 Then 
ExitLoop
(2)
EndIf
Next

Switch $i
Case 1
    MouseClick
("left"XY11)
Case 
2
    MouseClick
("left"XY11)
Case 
3
    MouseClick
("left"XY11)
Case 
4
    MouseClick
("left"XY11)
Case 
5
        MouseClick
("left"XY11)
EndSwitch
EndFunc
While 1
sleep
(20)
WEnd 
so müsste das eigentlich gehen, ka ob es geht ;D
06/18/2011 20:48 Vierus.exe#15
Nö geht nicht.:(
Nagut ich sags euch es geht um das Programm:[Only registered and activated users can see links. Click Here To Register...]
das ist Trial und ich will beim Start des Programmes die jewaligen Buttons drücken.
MfG
Vierus