|
You last visited: Today at 05:14
Advertisement
Case oder For oder While?
Discussion on Case oder For oder While? within the AutoIt forum part of the Coders Den category.
06/16/2011, 01:53
|
#1
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
Case oder For oder While?
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?
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
|
#2
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
definitiv switch... weiterhin hast du im Code nur WinWaitActive, du musst aber noch den eigentlichen Aktivierungsbefehl, also WinActivate, dazumachen.
|
|
|
06/16/2011, 02:17
|
#3
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
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
|
#4
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
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
|
#5
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
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
|
#6
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
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
|
#7
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
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
|
#8
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
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 + 1 & ".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
|
#9
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
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.
MfG
Vierus
|
|
|
06/16/2011, 21:52
|
#10
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
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
|
#11
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
So sieht es aus in den 1-5.bmp sind die Zahlen 1-5 als Bild das Funktioniert auch.
Vielleicht wirds jetzt klarer.
|
|
|
06/17/2011, 17:20
|
#12
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
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
|
#13
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
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
|
#14
|
elite*gold: 0
Join Date: Dec 2008
Posts: 1,304
Received Thanks: 485
|
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", 1, 0, 0, 5) If $result <> 0 Then ExitLoop(2) EndIf Next
Switch $i Case 1 MouseClick("left", X, Y, 1, 1) Case 2 MouseClick("left", X, Y, 1, 1) Case 3 MouseClick("left", X, Y, 1, 1) Case 4 MouseClick("left", X, Y, 1, 1) Case 5 MouseClick("left", X, Y, 1, 1) EndSwitch EndFunc While 1 sleep(20) WEnd
so müsste das eigentlich gehen, ka ob es geht ;D
|
|
|
06/18/2011, 20:48
|
#15
|
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
|
Nö geht nicht.
Nagut ich sags euch es geht um das Programm:
das ist Trial und ich will beim Start des Programmes die jewaligen Buttons drücken.
MfG
Vierus
|
|
|
All times are GMT +2. The time now is 05:14.
|
|