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
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.
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?
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
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?.
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
;---------------------------------
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
;---------------------------------
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>
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 =)
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
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?