Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 18:03

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

Advertisement



Gui's + While's?

Discussion on Gui's + While's? within the AutoIt forum part of the Coders Den category.

Reply
 
Old 12/28/2011, 14:04   #16
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
Du hast doch deine eine hauptschleife, in welcher du auf guiaktionen checkst. Dort baust du einfach über zustandsabfragen die jeweiligen Aktionen mit ein.
Hatte ich ja anfangs gehabt aber sobald ich dann bei der checkbox 2 sachen aktivieren lasse, läuft nur eine schleife durch
Project_X is offline  
Old 12/28/2011, 14:11   #17
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Project_X View Post
Hatte ich ja anfangs gehabt aber sobald ich dann bei der checkbox 2 sachen aktivieren lasse, läuft nur eine schleife durch
du solltest allgemein nur eine schleife laufen lassen. da du beim gui sowieso schon eine schleife am laufen hast, wäre jede weitere schleife schlecht, da sie ja schonmal die gui-abfrage schleife ausser gefecht setzt.
lolkop is offline  
Old 12/28/2011, 14:12   #18
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
du solltest allgemein nur eine schleife laufen lassen. da du beim gui sowieso schon eine schleife am laufen hast, wäre jede weitere schleife schlecht, da sie ja schonmal die gui-abfrage schleife ausser gefecht setzt.
Also gibt's so keine lösung, mehrer schleifen in einem programm unter zubringen o.o?

schuldige bin ein Anfänger
Project_X is offline  
Old 12/28/2011, 14:24   #19
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Project_X View Post
Also gibt's so keine lösung, mehrer schleifen in einem programm unter zubringen o.o?

schuldige bin ein Anfänger
du baust dir das über zustände selbst auf. der zustand kann wahr oder falsch sein. ist er war, wird gesendet, ist er falsch wird nicht gesendet.

hier mal ein beispiel, wie du 2 dinge gleichzeitig über eine schleife verwalten kannst:
Code:
$zustand1=False  ;<-- zustand vom ersten befehl auf [Aus]
$zustand2=True  ;<-- zustand vom zweiten befehl auf [An]

While 1
    If $zustand1 Then
        [...]
    EndIf
    If $zustand2 Then
        [...]
    EndIf
WEnd
lolkop is offline  
Thanks
1 User
Old 12/28/2011, 14:26   #20
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
du baust dir das über zustände selbst auf. der zustand kann wahr oder falsch sein. ist er war, wird gesendet, ist er falsch wird nicht gesendet.

hier mal ein beispiel, wie du 2 dinge gleichzeitig über eine schleife verwalten kannst:
Code:
$zustand1=False  ;<-- zustand vom ersten befehl auf [Aus]
$zustand2=True  ;<-- zustand vom zweiten befehl auf [An]

While 1
    If $zustand1 Then
        [...]
    EndIf
    If $zustand2 Then
        [...]
    EndIf
WEnd

aaah ok, aber kann das programm dann auch mal ne nacht durchlaufen?.

also halt, wie in einer while schleife?
Project_X is offline  
Old 12/28/2011, 16:32   #21
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
das ist doch nur eine while schleife. <.<

in deinem falle wären deine zustände dann die checkboxen.

Code:
;--------Erstelle das GUI---------
GUICreate(...)
$box1 = GUICtrlCreateCheckbox(...)
$box2 = GUICtrlCreateCheckbox(...)
;---------------------------------

;-----Erstelle Endlosschleife-----
Do
	;----Wenn Checkbox1 Aktiv, dann----
	If BitAND(GUICtrlRead($box1),1) Then
		[...]
	EndIf
	;----------------------------------
	;----Wenn Checkbox2 Aktiv, dann----
	If BitAND(GUICtrlRead($box2),1) Then
		[...]
	EndIf
	;----------------------------------
Until GUIGetMsg()=-3 ;Wenn das gui geschlossen wird, springe aus endlosschleife
;---------------------------------
lolkop is offline  
Thanks
1 User
Old 12/28/2011, 18:28   #22
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
das ist doch nur eine while schleife. <.<

in deinem falle wären deine zustände dann die checkboxen.

Code:
;--------Erstelle das GUI---------
GUICreate(...)
$box1 = GUICtrlCreateCheckbox(...)
$box2 = GUICtrlCreateCheckbox(...)
;---------------------------------

;-----Erstelle Endlosschleife-----
Do
	;----Wenn Checkbox1 Aktiv, dann----
	If BitAND(GUICtrlRead($box1),1) Then
		[...]
	EndIf
	;----------------------------------
	;----Wenn Checkbox2 Aktiv, dann----
	If BitAND(GUICtrlRead($box2),1) Then
		[...]
	EndIf
	;----------------------------------
Until GUIGetMsg()=-3 ;Wenn das gui geschlossen wird, springe aus endlosschleife
;---------------------------------

Aaah ok ich hab's vielen dank, für deine Geduld
Project_X is offline  
Old 12/28/2011, 19:16   #23
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
poste mal nochmal deinen vollständigen fertigen code bitte.
würde gerne sehen ob du nun wirklich verstanden hast, wovon ich rede =)
lolkop is offline  
Old 12/28/2011, 22:17   #24
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
poste mal nochmal deinen vollständigen fertigen code bitte.
würde gerne sehen ob du nun wirklich verstanden hast, wovon ich rede =)
PHP Code:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Privat-Bot"167127193125)
$Checkbox1 GUICtrlCreateCheckbox("1.Skill"8248117)
GUICtrlSetFont(-188000"MS Sans Serif")
$Checkbox2 GUICtrlCreateCheckbox("2.Skill"96247317)
GUICtrlSetFont(-188000"MS Sans Serif")
$Checkbox3 GUICtrlCreateCheckbox("Exp-Scrolls"8648117)
GUICtrlSetFont(-188000"MS Sans Serif")
$Checkbox4 GUICtrlCreateCheckbox("Lilien"96645717)
GUICtrlSetFont(-188000"MS Sans Serif")
$Checkbox5 GUICtrlCreateCheckbox("Samen"8968117)
GUICtrlSetFont(-188000"MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit

            If 
BitAND (GUICtrlRead($Checkbox1), 1Then
                Send 
("{1}")
                
Sleep (1000)

            EndIf

            If 
BitAND (GUICtrlRead($Checkbox2),1Then
                Send 
("{2}")
                
Sleep (1000)

            EndIf

    EndSwitch
WEnd 
So habe ich es momentan , hab ich das denn so jetzt richtig gemacht?xd er öffnet's zwar nur schreibt er mir nicht die Zahlen 1 & 2?.

Warum genau nicht,? oder irgendwas falsch gemacht?
Project_X is offline  
Old 12/29/2011, 00:09   #25
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
das sieht soweit schonmal gut aus.

das hauptproblem hier liegt darin, das du die abfragen in deiner switch abfrage nur dann aufrufst, wenn dein programm beendet wird.

also statt das in deiner switch abfrage bei case exit anzuwenden, entweder in den case else zweig packen, oder unter die switch abfrage.

jetzt musst du noch von den sleeps weg kommen.

sleep sollte man in autoit allgemein nicht nutzen. stattdessen macht es viel mehr sinn mit timern zu arbeiten.

in deinem falle musst du für jedes send einen timer anlegen. hierfür gibt es die funktionen timerinit und timerdiff.

timerinit() gibt die aktuelle laufzeit deiner cpu in millisekunden aus. timerdiff($timestamp) berechnet die differenz von dem zeitstempel, welcher von timerinit erzeugt wird, und der aktuellen laufzeit.

wird also zb bei 500.000ms cpu laufzeit
Code:
$timer = timerinit
angewendet, so speichert $timer jetzt 500.000.

wird dann 2ms später (also bei 500.002 ms cpu laufzeit)
Code:
$diff = timerdiff($timer)
angewendet, so wird $diff berechnet aus 500.002 - 500.000 und demzufolge auf 2ms gesetzt.

dh es sind 2ms vergangen...

setzen wir das nun in deinen code ein, so erhalten wir folgendes:
Code:
Dim $timer1, $timer2

$Form1 = GUICreate("Privat-Bot", 167, 127, 193, 125)
$Checkbox1 = GUICtrlCreateCheckbox("1.Skill", 8, 24, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox2 = GUICtrlCreateCheckbox("2.Skill", 96, 24, 73, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox3 = GUICtrlCreateCheckbox("Exp-Scrolls", 8, 64, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox4 = GUICtrlCreateCheckbox("Lilien", 96, 64, 57, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox5 = GUICtrlCreateCheckbox("Samen", 8, 96, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case Else
			If BitAND (GUICtrlRead($Checkbox1), 1) And TimerDiff($timer1)>=1000 Then
				Send ("{1}")
				$timer1 = TimerInit()
			EndIf
			If BitAND (GUICtrlRead($Checkbox2),1) And TimerDiff($timer2)>=1000 Then
				Send ("{2}")
				$timer2=TimerInit()
			EndIf
	EndSwitch
WEnd
vorteil hier ist, das du die timer beliebig für jede aktion einzeln setzen kannst =)
lolkop is offline  
Thanks
1 User
Old 12/29/2011, 02:04   #26
 
elite*gold: 0
Join Date: Nov 2010
Posts: 45
Received Thanks: 5
Quote:
Originally Posted by lolkop View Post
das sieht soweit schonmal gut aus.

das hauptproblem hier liegt darin, das du die abfragen in deiner switch abfrage nur dann aufrufst, wenn dein programm beendet wird.

also statt das in deiner switch abfrage bei case exit anzuwenden, entweder in den case else zweig packen, oder unter die switch abfrage.

jetzt musst du noch von den sleeps weg kommen.

sleep sollte man in autoit allgemein nicht nutzen. stattdessen macht es viel mehr sinn mit timern zu arbeiten.

in deinem falle musst du für jedes send einen timer anlegen. hierfür gibt es die funktionen timerinit und timerdiff.

timerinit() gibt die aktuelle laufzeit deiner cpu in millisekunden aus. timerdiff($timestamp) berechnet die differenz von dem zeitstempel, welcher von timerinit erzeugt wird, und der aktuellen laufzeit.

wird also zb bei 500.000ms cpu laufzeit
Code:
$timer = timerinit
angewendet, so speichert $timer jetzt 500.000.

wird dann 2ms später (also bei 500.002 ms cpu laufzeit)
Code:
$diff = timerdiff($timer)
angewendet, so wird $diff berechnet aus 500.002 - 500.000 und demzufolge auf 2ms gesetzt.

dh es sind 2ms vergangen...

setzen wir das nun in deinen code ein, so erhalten wir folgendes:
Code:
Dim $timer1, $timer2

$Form1 = GUICreate("Privat-Bot", 167, 127, 193, 125)
$Checkbox1 = GUICtrlCreateCheckbox("1.Skill", 8, 24, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox2 = GUICtrlCreateCheckbox("2.Skill", 96, 24, 73, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox3 = GUICtrlCreateCheckbox("Exp-Scrolls", 8, 64, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox4 = GUICtrlCreateCheckbox("Lilien", 96, 64, 57, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Checkbox5 = GUICtrlCreateCheckbox("Samen", 8, 96, 81, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case Else
			If BitAND (GUICtrlRead($Checkbox1), 1) And TimerDiff($timer1)>=1000 Then
				Send ("{1}")
				$timer1 = TimerInit()
			EndIf
			If BitAND (GUICtrlRead($Checkbox2),1) And TimerDiff($timer2)>=1000 Then
				Send ("{2}")
				$timer2=TimerInit()
			EndIf
	EndSwitch
WEnd
vorteil hier ist, das du die timer beliebig für jede aktion einzeln setzen kannst =)
Vielen Vielen dank Funktioniert super & habe es sogar verstanden

Sehr nett von dir gewesen
Project_X is offline  
Reply

Tags
autoit. while's, checkbox


Similar Threads Similar Threads
Autoit Extra Gui's [32-Bit]
03/28/2011 - AutoIt - 17 Replies
Seit längerem habe ich eine art gefunden, echt tolle guis in Autoit zu realisieren. Jetzt will ich euch zeigen wie es Funktioniert. Vermerk! Diese art Funktioniert nur bei 32-bit Pcs, dar die dazu benötigte dll für 32-bit ausgelegt ist! Ich stelle euch alle 127 Skins zur verfügung. Hier ein Beispiel:
Hi I Need Some Tips/Pointers to AutoIt/GUI's
12/30/2010 - General Coding - 0 Replies
Hi i just got AutoIt +Beta etc. only thing is the "help" file is pretty darn useless to me... it tells nothing of how to make a scrips work or what Comands i have to know or use them... i whant to use the program so make small bots to deferent games... (most MMORPG) if some one can give me a link to a step by step guide on how to make it work or can Email me the Comands and mby tell me how to put them together it would be real nice...
Hi I Need Some Tips/Pointers to AutoIt/GUI's
12/30/2010 - Main - 1 Replies
Hi i just got AutoIt +Beta etc. only thing is the "help" file is pretty darn useless to me... it tells nothing of how to make a scrips work or what Comands i have to know or use them... i whant to use the program so make small bots to deferent games... (most MMORPG) if some one can give me a link to a step by step guide on how to make it work or can Email me the Comands and mby tell me how to put them together it would be real nice... :D
Fragen zu GUI'S
12/07/2009 - AutoIt - 7 Replies
1. Hi, ich hab ein Programm mit zwei GUI's und wenn ich eine GUI schließe, schließen sich beide. Wie kann man ihm sagen, wenn man $GUI_EVENT_CLOSE drückt, nicht gleich das ganze skript beenden soll? 2. Kann man die GUI irgendwie aktuallisieren, ohne das Programm neu zu starten?



All times are GMT +1. The time now is 18:03.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.