Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 05:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Case oder For oder While?

Discussion on Case oder For oder While? within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2011
Posts: 67
Received Thanks: 4
Question 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
Vierus.exe is offline  
Old 06/16/2011, 02:05   #2
 
Reeek's Avatar
 
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.
Reeek is offline  
Thanks
1 User
Old 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
Vierus.exe is offline  
Old 06/16/2011, 02:23   #4
 
Reeek's Avatar
 
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...
Reeek is offline  
Thanks
1 User
Old 06/16/2011, 10:32   #5
 
lolkop's Avatar
 
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 =)
lolkop is offline  
Old 06/16/2011, 14:19   #6
 
Reeek's Avatar
 
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.
Reeek is offline  
Thanks
1 User
Old 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
Vierus.exe is offline  
Old 06/16/2011, 18:57   #8
 
Reeek's Avatar
 
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 ".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.
Reeek is offline  
Thanks
1 User
Old 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
Vierus.exe is offline  
Old 06/16/2011, 21:52   #10
 
lolkop's Avatar
 
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
lolkop is offline  
Old 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.
Vierus.exe is offline  
Old 06/17/2011, 17:20   #12
 
Reeek's Avatar
 
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...
Reeek is offline  
Thanks
1 User
Old 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.
Vierus.exe is offline  
Old 06/18/2011, 18:30   #14
 
Reeek's Avatar
 
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"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
Reeek is offline  
Thanks
1 User
Old 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
Vierus.exe is offline  
Reply


Similar Threads Similar Threads
Suche EQ/Yang/Accounts auf Leviathan oder Sobo oder SG (S.25 oder 21)
06/27/2011 - Metin2 Trading - 4 Replies
Wie der Titel bereits sagt. Suche Sachen auf Leviathan, Sobo oder Metin2.Sg Bezahle mit Paypal oder auf Wunsch extra mit Paysafecards. Msged mich oder addet mich in Skype: krixxon Verhandelt wird mit einem Mod oder Middleman.
Hat jemand ein programm für anti smoke oder anti flash oder m14 oder crosshair..sry
02/23/2011 - WarRock - 6 Replies
hat jemand ein programm für anti smo0ke anti flash anti m14 mine oder crosshair wenn ja hier rein psoten und gibt thx sry für dieses thread
[S] Gamecard 60 Tage [B] PSC oder Gold oder Keys oder Amazon Gutscheine
11/29/2010 - World of Warcraft Trading - 7 Replies
Gamecard 60 Tage 25€ PSC oder Gold auf allen servern oder Keys oder Amazon Gutscheine 40€ einfach mal bieten :) habe keys von classic bis cata von cata aber nur 2 vorbestellte :D



All times are GMT +2. The time now is 05:14.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.