Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 01:44

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

Advertisement



While Schleifen Problem

Discussion on While Schleifen Problem within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
[Gelöst]While Schleifen Problem

Hi Com.,

ich habe einen Fritzbox ip changer geschrieben.

Alles klappt wunderbar, nur macht mir die while schleife zu schaffen.

Hier mein Script.

Code:
#include <INet.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
HotKeySet("{NUMPAD1}", "_change")
Global $AutoChange = false


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Fr!tzBox Ip Changer by FreehuntX", 360, 154, 294, 253)
$Group1 = GUICtrlCreateGroup("Simple Changer", 8, 0, 153, 57)
$Button1 = GUICtrlCreateButton("Change", 16, 24, 75, 25)
$Label1 = GUICtrlCreateLabel("or    Num1", 96, 32, 53, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label2 = GUICtrlCreateLabel("Current IP:", 8, 72, 54, 17)
$Label3 = GUICtrlCreateLabel("Please Wait", 64, 72, 101, 17)
$Group2 = GUICtrlCreateGroup("Status", 8, 96, 153, 49)
$Label4 = GUICtrlCreateLabel("Nothing...", 32, 120, 50, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Time Changer", 168, 0, 185, 145)
$Input1 = GUICtrlCreateInput("1800", 224, 22, 113, 21)
$Label5 = GUICtrlCreateLabel("Delay:", 176, 24, 34, 17)
$Button2 = GUICtrlCreateButton("Start", 176, 56, 75, 25)
$Button3 = GUICtrlCreateButton("Stop", 264, 56, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Status", 176, 88, 169, 49)
$Label6 = GUICtrlCreateLabel("Nothing...", 200, 112, 50, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetdata($Label3,_GetIp())




While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $Button1
			_change()
			
		Case $button2
			_AutoON()
			
		Case $Button3
			_AutoOFF()

	EndSwitch
WEnd



Func _change()
GUICtrlSetState($Button1, $GUI_DISABLE)
GUICtrlSetdata($Label4,"Changing...")
TrayTip("Fritz!Box","Die Internetverbindung wird jetzt getrennt ...", 8)
RunWait(@ComSpec & " /c " & 'type data.box | "' & @ScriptDir & '\nc.exe" -w 1 fritz.box 49000 >nul', "", @SW_HIDE)
TrayTip("Fritz!Box","Die Internetverbindung wurde getrennt und kann jetzt wiederhergestellt werden!", 8)
Sleep(3000)
GUICtrlSetdata($Label3,_GetIp())
GUICtrlSetdata($Label4,"Changed!")
GUICtrlSetState($Button1, $GUI_Enable)
sleep(3000)
GUICtrlSetdata($Label4,"Nothing...")
EndFunc

Func _AutoON()
GUICtrlSetState($Button2, $GUI_DISABLE)
GUICtrlSetState($Button3, $GUI_Enable)
$AutoChange = true
while $AutoChange = true
Sleep(GUICtrlRead($Input1)*1000)
GUICtrlSetdata($Label6,"Changing...")
GUICtrlSetState($Button1, $GUI_Disable)
TrayTip("Fritz!Box","Die Internetverbindung wird jetzt getrennt ...", 8)
RunWait(@ComSpec & " /c " & 'type data.box | "' & @ScriptDir & '\nc.exe" -w 1 fritz.box 49000 >nul', "", @SW_HIDE)
TrayTip("Fritz!Box","Die Internetverbindung wurde getrennt und kann jetzt wiederhergestellt werden!", 8)
Sleep(3000)
GUICtrlSetdata($Label3,_GetIp())
GUICtrlSetdata($Label6,"Changed!")
GUICtrlSetState($Button1, $GUI_Enable)
sleep(3000)
GUICtrlSetdata($Label6,"Nothing...")
If $AutoChange = false Then ExitLoop
wend
EndFunc

Func _AutoOFF()
GUICtrlSetState($Button2, $GUI_Enable)
GUICtrlSetState($Button3, $GUI_DISABLE)
$AutoChange = false
	
EndFunc
Ich komme einfach nicht weiter.

Ich möchte lediglich dass der Stop button, während der schleife verwenbar ist, um die schleife zu beenden.

hoffe ihr könnt mir geschickte ideen geben.
freehuntx is offline  
Old 12/28/2010, 11:08   #2
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Ich hab das ganze mal überschaubar geändert. Die TrayTips habe ich mit den
Sleeps entfernt, da die 6 Sekunden beim drücken auf den Stop Button nerven
könnten. Falls du sie wieder rein nehmen willst würde ich dir Timer empfehlen.

PHP Code:
#include <INet.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
GUICreate("FR!TZBox IP Changer by FreehuntX"360155)
GUICtrlCreateGroup("Simple Changer"8015357)
$B_Change GUICtrlCreateButton("Change"16247525)
GUICtrlCreateLabel("or    Num1"96325317)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateLabel("Current IP:"8725417)
$L_IP GUICtrlCreateLabel("Please Wait"647210117)
GUICtrlCreateGroup("Status"89615349)
$L_Status GUICtrlCreateLabel("Nothing..."2012014017)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateGroup("Time Changer"1680185145)
$I_Delay GUICtrlCreateInput("1800"2242211321)
GUICtrlCreateLabel("Delay:"176243417)
$B_Start GUICtrlCreateButton("Start"176567525)
$B_Stop GUICtrlCreateButton("Stop"264567525)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateGroup("Status"1768816949)
$L_StatusT GUICtrlCreateLabel("Nothing..."19011214517)
GUICtrlCreateGroup("", -99, -9911)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetState($B_Stop$GUI_DISABLE)
GUICtrlSetdata($L_IP_GetIp())

Global 
$Start$AutoChange False
Global $Timer$Hotkey True
HotKeySet
("{NUMPAD1}""_ChangeH")

While 
Sleep(10)
    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$B_Change
            _Change
()
        Case 
$B_Start
            GUICtrlSetState
($B_Start$GUI_DISABLE)
            
GUICtrlSetState($B_Stop$GUI_ENABLE)
            
$AutoChange True
            $Start 
True
        
Case $B_Stop
            GUICtrlSetState
($B_Start$GUI_ENABLE)
            
GUICtrlSetState($B_Stop$GUI_DISABLE)
            
$AutoChange False
            $Timer 
0
    
EndSwitch

    If 
$AutoChange Then
        
If $Start Then
            _Change
($L_StatusT)
            
$Timer TimerInit()
            
$Start False
        
EndIf

        If 
TimerDiff($Timer) >= (GUICtrlRead($I_Delay) * 1000Then
            _Change
($L_StatusT)
            
$Timer TimerInit()
        EndIf
    EndIf
WEnd

Func _ChangeH
()
    If 
$Hotkey Then
        $Hotkey 
False
        _Change
()
    EndIf
EndFunc

Func _Change
($Label $L_Status)
    If 
$Label == $L_Status Then GUICtrlSetState($B_Change$GUI_DISABLE)

    
GUICtrlSetdata($Label,"Changing...")
    
RunWait(@ComSpec " /c " 'type data.box | "' & @ScriptDir '\nc.exe" -w 1 fritz.box 49000 >nul'"", @SW_HIDE)
    
GUICtrlSetdata($L_IP_GetIp())
    
GUICtrlSetdata($Label"Last Change: " & @HOUR ":" & @MIN ":" & @SEC)

    If 
$Label == $L_Status Then GUICtrlSetState($B_Change$GUI_ENABLE)
    If 
$Hotkey == False Then $Hotkey True
EndFunc 
KDeluxe is offline  
Old 12/28/2010, 16:32   #3
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
danke, aber das problem ist damit leider nicht gelöst.
freehuntx is offline  
Old 12/28/2010, 18:13   #4
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Eigentlich sollte sich deine Frage von selbst beantworten, wechselst du von
einer Schleife in die andere wird die vorherige nicht mehr beachtet. Ist die
Bedingung für deine 2. Schleife erst einmal erfüllt bleibt sie das bei deinem
Script für immer. Ein einfaches
PHP Code:
If GUIGetMsg() == $button2 Then $AutoChange False 
in deiner 2. Schleife würde das Problem lösen.


Nächstes Problem:
PHP Code:
Sleep(GUICtrlRead($Input1)*1000
Du pausierst das gesamte Script für die eingetragene Zeit, in der Zeit kannst
du mit einem Script generell wenig Anfang. Die Benutzung eines Timers wäre
hier angebracht. Die Funktionen "_Change" und "_AutoON" sind fast identisch.
Alles in eine Schleife zu packen, wie ich es gemacht habe, ist meiner Meinung
nach praktischer. Den Zusatz "by FreehuntX" beim Titel finde ich außerdem
etwas dreist, da du eigentlich nur die GUI gemacht hast und den Rest vom
"FR!TZBox Reconnecter" kopiert hast und das ohne einen Vermerk.
KDeluxe is offline  
Old 12/28/2010, 22:41   #5
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
1. Enthält dieser Reconnector 3 zeilen.
2. Wird es sowieso nicht releaset, es dient lediglich zu privaten zwecken.
3. Würdest du Credits angeben wenn du dir ein Program für eigene zwecke schreibst? Denke ich nicht.

Ich wusste ja dass das Sleep die Probleme verursacht...
Gibt es vielleicht eine andere funktion, ähnlich wie sleep, welche sinnvoller ist?
freehuntx is offline  
Old 12/28/2010, 22:44   #6
 
PenGuin :O's Avatar
 
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
Quote:
Originally Posted by KillerDeluxe View Post
Den Zusatz "by FreehuntX" beim Titel finde ich außerdem
etwas dreist, da du eigentlich nur die GUI gemacht hast und den Rest vom
"FR!TZBox Reconnecter" kopiert hast und das ohne einen Vermerk.
So gesehen, müsstest du bei jeder GUI, die du entwirfst, die Credits von dem angeben, ders zuerst gemacht hat :P
Oder beim Injecten per WirteProcessMemory, z.B.
PenGuin :O is offline  
Thanks
1 User
Old 12/29/2010, 00:38   #7
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Ob ich etwas ähnliches mache, oder ob ich das "Herzstück" 1 zu 1 kopiere ist etwas
anderes. Bei einem Injector kopiert man auch nicht explizit etwas (im "Normalfall").

Naja, die Lösung ist ein Timer, dafür solltest du dir TimerInit() und TimerDiff() anschauen.
KDeluxe is offline  
Old 12/29/2010, 03:42   #8
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
Damit kann ich ja nur die zeit zwischen einem sleep auslesen.

naja ich werde es dann wohl ohne stop machen müssen
freehuntx is offline  
Old 12/29/2010, 03:47   #9
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Was hindert dich daran, dass von mir gepostete Script zu benutzen? Ist es erst einmal
eine .exe merkst du nur, dass die TrayTips fehlen, die 2 Zeilen kannst du aber auch wieder
mit rein nehmen, dann hast du eigentlich keinen Unterschied.
KDeluxe is offline  
Old 12/29/2010, 18:09   #10
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
1. Lässt sich während des Sleeps nicht Stoppen.
2. Verstehe ich das Script nicht, und dann bringt es mir wenig.
freehuntx is offline  
Old 12/29/2010, 18:31   #11
 
PenGuin :O's Avatar
 
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
Ja, deshalb ja die Timer Funktionen...
PenGuin :O is offline  
Old 12/29/2010, 19:20   #12
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Quote:
Originally Posted by KillerDeluxe View Post
Ich hab das ganze mal überschaubar geändert. Die TrayTips habe ich mit den
Sleeps entfernt, da die 6 Sekunden beim drücken auf den Stop Button nerven
könnten. Falls du sie wieder rein nehmen willst würde ich dir Timer empfehlen.

PHP Code:
#include <INet.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
GUICreate("FR!TZBox IP Changer by FreehuntX"360155)
GUICtrlCreateGroup("Simple Changer"8015357)
$B_Change GUICtrlCreateButton("Change"16247525)
GUICtrlCreateLabel("or    Num1"96325317)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateLabel("Current IP:"8725417)
$L_IP GUICtrlCreateLabel("Please Wait"647210117)
GUICtrlCreateGroup("Status"89615349)
$L_Status GUICtrlCreateLabel("Nothing..."2012014017)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateGroup("Time Changer"1680185145)
$I_Delay GUICtrlCreateInput("1800"2242211321)
GUICtrlCreateLabel("Delay:"176243417)
$B_Start GUICtrlCreateButton("Start"176567525)
$B_Stop GUICtrlCreateButton("Stop"264567525)
GUICtrlCreateGroup("", -99, -9911)
GUICtrlCreateGroup("Status"1768816949)
$L_StatusT GUICtrlCreateLabel("Nothing..."19011214517)
GUICtrlCreateGroup("", -99, -9911)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetState($B_Stop$GUI_DISABLE)
GUICtrlSetdata($L_IP_GetIp())

Global 
$Start$AutoChange False
Global $Timer$Hotkey True
HotKeySet
("{NUMPAD1}""_ChangeH")

While 
Sleep(10)
    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$B_Change
            _Change
()
        Case 
$B_Start
            GUICtrlSetState
($B_Start$GUI_DISABLE)
            
GUICtrlSetState($B_Stop$GUI_ENABLE)
            
$AutoChange True
            $Start 
True
        
Case $B_Stop
            GUICtrlSetState
($B_Start$GUI_ENABLE)
            
GUICtrlSetState($B_Stop$GUI_DISABLE)
            
$AutoChange False
            $Timer 
0
    
EndSwitch

    If 
$AutoChange Then
        
If $Start Then
            _Change
($L_StatusT)
            
$Timer TimerInit()
            
$Start False
        
EndIf

        If 
TimerDiff($Timer) >= (GUICtrlRead($I_Delay) * 1000Then
            _Change
($L_StatusT)
            
$Timer TimerInit()
        EndIf
    EndIf
WEnd

Func _ChangeH
()
    If 
$Hotkey Then
        $Hotkey 
False
        _Change
()
    EndIf
EndFunc

Func _Change
($Label $L_Status)
    If 
$Label == $L_Status Then GUICtrlSetState($B_Change$GUI_DISABLE)

    
GUICtrlSetdata($Label,"Changing...")
    
RunWait(@ComSpec " /c " 'type data.box | "' & @ScriptDir '\nc.exe" -w 1 fritz.box 49000 >nul'"", @SW_HIDE)
    
GUICtrlSetdata($L_IP_GetIp())
    
GUICtrlSetdata($Label"Last Change: " & @HOUR ":" & @MIN ":" & @SEC)

    If 
$Label == $L_Status Then GUICtrlSetState($B_Change$GUI_ENABLE)
    If 
$Hotkey == False Then $Hotkey True
EndFunc 
Ich benutze kein Sleep um etwas über längere Zeit zu benutzen, nur
PHP Code:
While Sleep(10
um die CPU Auslastung etwas zu vermindern. Diese 10 Millisekunden stören aber nicht.




Hier kommen ein paar Erklärungen (die am Ende nicht viel bringen?):
KDeluxe is offline  
Old 12/29/2010, 19:38   #13
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
Mal so am Rande.

Dein Script ändert sofort nach drücken des buttons die ip, aber er soll ja immer nach einer bestimmten zeit die ip ändern.
freehuntx is offline  
Old 12/29/2010, 20:39   #14
 
PenGuin :O's Avatar
 
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
Code:
;PenGuin :O

Global $hGUI, $Start, $Count, $State, $Counter
Global $i = 1

$hGUI = GUICreate("Einfaches Beispiel", 299, 87, 446, 327)
GUISetFont(11, 400, 0, "Arial")
$Start = GUICtrlCreateButton("Start", 24, 48, 113, 25)
$Count = GUICtrlCreateButton("Erhöhen", 160, 48, 113, 25)
$State = GUICtrlCreateLabel("Aus", 66, 16, 47, 21)
$Counter = GUICtrlCreateLabel("1", 205, 16, 47, 21)
GUISetState()

While True
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Start
			GUICtrlSetstate($Start, 128)
			GUICtrlSetData($State, "Ein")
			AdlibRegister("_MsgBox", 10000)
		Case $Count
			$i += 1
			GUICtrlSetData($Counter, $i)
	EndSwitch
WEnd

Func _MsgBox()
	MsgBox(0, "Zeit", "10 Sekunden vergangen, und du konntest trotzdem noch den anderen Button benutzen!")
	GUICtrlSetData($State, "Aus")
	GUICtrlSetstate($Start, 64)
	AdlibUnRegister("_MsgBox")
EndFunc
Hier mit AdlibRegister.
Der erhöhen Button funktioniert trotzdem noch und nach 10 Sekunden kommt die MsgBox.
PenGuin :O is offline  
Old 12/29/2010, 20:55   #15
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
da is doch kein sleep 0.0
freehuntx is offline  
Reply


Similar Threads Similar Threads
Probleme mit den Schleifen x.x
07/23/2010 - AutoIt - 18 Replies
Ja, hallo. :D Mein Problem ist das ich gerne einen Bot bauen würde der einnen Tastendruck ausführt wenn sich ein bestimmer Pixel auf dem Bildschirm verändert. Nur ist das Problem das AutoIt zu lahm ist da der Pixel sich schnell beweget und somit auch seine Farbe ändert und der Bot dann es nichtmehr schafft zuzuschlagen. :P Was ich nun versucht hab ist das man vll. sozusagen eine Tolleranz einbaut wie z.b. bei dem Pixelsearch Befehl nur ich hab ka. wie ich das anstellen soll. Ich...
Auto-Schleifen [Problem]
06/23/2010 - Off Topic - 10 Replies
Hallo, und zwar brauche ich Informationen über das Schleifen. Am besten wäre folgendes: Woher kommt das Schleifen? Wie schleift man richtig?
AutoIt - Frage/Problem bei den Schleifen!!
04/05/2010 - AutoIt - 6 Replies
Nabend, ich hätte da mal eine kleine Frage zum unterbrechen von Endlosschleifen. Und nein, damit meine ich nicht einfach den Befehl "Exitloop"! Also, ich werde mal anhand eines kleinen Test-Scripts versuchen, meine Frage zu erklären: #include <GUIConstants.au3> #Region ### START Koda GUI section ### Form=
Exitloop Problem mit mehreren Schleifen
10/21/2009 - AutoIt - 5 Replies
Abend ! und zwar sieht mein Problem wie folgt aus: While 1=1 (das script) If...Then -hier ist das problem: ich möchte das das programm die while schleife sozusagen pausiert -dann das was gemacht werden soll



All times are GMT +1. The time now is 01:45.


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.