|
You last visited: Today at 04:31
Advertisement
Hilfe bei einer Schleife (Pausierung)
Discussion on Hilfe bei einer Schleife (Pausierung) within the AutoIt forum part of the Coders Den category.
04/30/2015, 00:26
|
#1
|
elite*gold: 0
Join Date: Apr 2015
Posts: 8
Received Thanks: 0
|
Hilfe bei einer Schleife (Pausierung)
Hallo Leute,
ich bin ein ziemlicher Anfänger, - möchte aber direkt sagen, ich muss kein Profi werden. Ich habe mir für die Uni ein kleines "Lesetool" gebaut, doch leider hat es ein Problem :
Wenn ich das sleep länger als 3000 mache, kann ich das Program nicht mehr stoppen. Scheinbar hängt es dann im Sleepmodus fest. Mit sleep 100 kann ich es stoppen, aber das ist zu kurz zum lesen :-( (Später möchte ich mit iniread iniwrite noch den "sleep" über das Menü eingeben (je nach Textlänge - das ist aber dann die nächste Baustelle. Hilfe brauche ich bei dem Sleep eben...) Ich habe mal was mit einem Timer statt Sleep gelesen, doch nach 2-3 Stunden probieren, frage ich nun doch nach Hife.
Ich freue mich über eine Lösung. Hier der Code:
Code:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
If $schleife = 0 Then
AdlibRegister("schleife", 200)
GUICtrlSetData($Button1, "Stop")
$schleife = 1
Else
AdlibUnRegister()
GUICtrlSetData($Button1, "Blättern")
$schleife = 0
EndIf
EndSwitch
WEnd
Func schleife()
ControlClick($hwnd, "", "", "left",1, Random(10,25), Random(325,370)) ;Öffnechat
sleep(100)
ControlClick($hwnd, "", "", "left",1, Random(339,355), Random(325,370)) ;Öffnechat
EndFunc ;==>schleife
|
|
|
04/30/2015, 00:52
|
#2
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
1. Ich kenne mich nicht besonders mit Adlib aus aber dein 200ms Timer könnte das Problem sein. Wenn du z.B. einen Sleep mit 500ms in der Funktion einbaust, wird ja schon bereits nach 200ms die Funktion wieder aufgerufen bevor die erste beendet wurde. In der  wird ja auch in der Adlibfunktion geschrieben:
Quote:
|
;... die Ausführung darf nicht blockiert werden. Die Verwendung der ...Wait(), MsgBox(), InputBox() Funktionen ist daher zu vermeiden.
|
Ich könnte mich aber auch irren, kenne mich wie gesagt damit nicht besonders aus
2. Timer sind ganz einfach. Mit $Timer1 = TimerInit() initialisierst du einen Timer. Mit $ZeitVergangen = TimerDiff($Timer1) findest du heraus wie viele Millisekunden in der Zeit vom initialisieren vergangen sind. Beispiel:
$Timer1 = TimerInit()
Sleep(3000)
$ZeitVergangen = TimerDiff($Timer1)
Msgbox(0,"Zeit vergangen",$ZeitVergangen)
; Er wird dir ~3000 ausgeben
Mit $Timer1 = TimerInit() kannst du den Timer wieder auf Null setzen, sodass er wieder neu anfängt zu zählen. Mit Timern kann man so ein Zeitproblem gut und einfach lösen, nur verstehe ich nicht ganz was du mit deinem "Lesetool" meinst und was er genau macht. Hoffe ich hab dir etwas weitergeholfen
|
|
|
04/30/2015, 01:16
|
#3
|
elite*gold: 0
Join Date: Apr 2015
Posts: 8
Received Thanks: 0
|
Vielen Dank für deine Antwort. Leider blockiert er mit dem Timer auch den Abbruch via Buttom
Ich habe einen anderen Weg probiert, jedoch habe ich da keine Ahnung wie ich die Iniwrite einbinde :/ Jetzt geht das mit dem Timer bzw dem langen Sleep aber eben nicht der iniwrite.. grübel
Quote:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
$hWnd = WinGetHandle("Windows Fotoanzeige")
Global $modus = False
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1_1_1 = GUICreate("Blatterer", 186, 107, 321, 314)
GUISetBkColor(0xABABAB)
$Start = GUICtrlCreateButton("Start", 11, 5, 81, 33)
$Stop = GUICtrlCreateButton("Stop", 92, 5, 81, 33)
$bis = GUICtrlCreateInput("3000", 53, 42, 37, 21)
$speichern = GUICtrlCreateButton("Übernehmen", 92, 40, 81, 25)
$von = GUICtrlCreateInput("2000", 12, 42, 37, 21)
$beschreibung = GUICtrlCreateButton("Beschreibung", 13, 72, 153, 25) ; Hier soll ein Popup aufgehen, wo ich eine kleine Erklärung mitteilen möchte. (Text)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
#cs Ich Schaffe es nicht diese Funktion einzubringen bzw das Program scheint dann in dieser Funktion hängen zu bleiben
Dim $ini = @ScriptDir & "\Config.ini"
Dim $AngabeVON = IniRead ("Config.ini", "Benutzerdaten", "von", GUICtrlRead($von))
Dim $AngabeBIS = IniRead ("Config.ini", "Benutzerdaten", "bis", GUICtrlRead($bis))
$nMsg = GUIGetMsg()
Switch $nMsg
Case $speichern
IniWrite("Config.ini", "Benutzerdaten", "von", GUICtrlRead($von))
IniWrite("Config.ini", "Benutzerdaten", "bis", GUICtrlRead($bis))
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
#ce
GUICtrlSetOnEvent($Start, '_start')
GUICtrlSetOnEvent($Stop, '_stop')
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')
While Sleep(10)
If $modus = True Then
$hWnd = WinGetHandle("BlueStacks App Player")
ControlClick($hwnd, "", "", "left",1, Random(10,25), Random(325,370))
Sleep(Random(1000,2000))
;;;;;;;;;;;; Hier sollte eigentlich dann $AngabeVON,$AngabeBIS stehen....
ControlClick($hwnd, "", "", "left",1, Random(339,355), Random(325,370))
Sleep(Random(1000,3000))
EndIf
WEnd
Func _exit()
Exit
EndFunc
Func _start()
$modus = True
EndFunc
Func _stop()
$modus = False
EndFunc
|
|
|
|
04/30/2015, 19:47
|
#4
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
Quote:
$nMsg = GUIGetMsg()
Switch $nMsg
Case $speichern
IniWrite("Config.ini", "Benutzerdaten", "von", GUICtrlRead($von))
IniWrite("Config.ini", "Benutzerdaten", "bis", GUICtrlRead($bis))
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
|
Dieser Code funktioniert nicht, da ein Switch keine Schleife ist. Das heißt der Code wird nur 1x durchgelaufen, also reagiert dein Script nicht auf Buttons. Der Switch muss in einer Endlosschleife sein, wie z.B. in deiner While Sleep(10) Schleife.
|
|
|
05/01/2015, 16:07
|
#5
|
elite*gold: 0
Join Date: Apr 2015
Posts: 8
Received Thanks: 0
|
Vielen Dank für deine erneute Antwort :-)
Nun wenn ich es in die Schlaufe mache, dann lässt es sich nicht stoppen bzw er schreibt es n die Ini, ich kann danach aber die andere Funktion nicht mehr starten. Scheinabar macht er mit dem Buttom dann eine Endlosschlaufe mit dem Eintrag. Wie stelle ich es ein, dass er es nur einmal machen soll?
Habe wieder einige Stunden versucht aber ohne Erfolg... huihuihui
|
|
|
05/01/2015, 16:46
|
#6
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
Quote:
Originally Posted by Howa2000
Vielen Dank für deine erneute Antwort :-)
Nun wenn ich es in die Schlaufe mache, dann lässt es sich nicht stoppen bzw er schreibt es n die Ini, ich kann danach aber die andere Funktion nicht mehr starten. Scheinabar macht er mit dem Buttom dann eine Endlosschlaufe mit dem Eintrag. Wie stelle ich es ein, dass er es nur einmal machen soll?
Habe
wieder einige Stunden versucht aber ohne Erfolg... huihuihui
|
Poste mal deinen code
|
|
|
05/01/2015, 19:58
|
#7
|
elite*gold: 0
Join Date: Apr 2015
Posts: 8
Received Thanks: 0
|
Immer noch der letze den ich gepostet habe. Ich versuche immer was, dann gehts nicht und zurück zum start.
|
|
|
05/02/2015, 00:38
|
#8
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
Quote:
Das war das Problem. Wenn du den Modus aktivierst, musst du den anscheinend auch einbehalten. Das heißt, du kannst Funktionen per Buttonklick nur noch so ausführen:
GUICtrlSetOnEvent($Start, '_start')
und nicht mehr in einer GUIGetMsg()-Schleife
PHP Code:
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode",1) $hWnd = WinGetHandle("Windows Fotoanzeige") Global $modus = False Global $ini = @ScriptDir & "\Config.ini" Global $AngabeVON = IniRead($ini, "Benutzerdaten", "von","1000") Global $AngabeBIS = IniRead($ini, "Benutzerdaten", "bis","3000")
#Region ### START Koda GUI section ### Form= $Form1_1_1 = GUICreate("Blatterer", 186, 107, 321, 314) GUISetBkColor(0xABABAB) $Start = GUICtrlCreateButton("Start", 11, 5, 81, 33) $Stop = GUICtrlCreateButton("Stop", 92, 5, 81, 33) Global $bis = GUICtrlCreateInput($AngabeBIS, 53, 42, 37, 21) $speichern = GUICtrlCreateButton("Übernehmen", 92, 40, 81, 25) Global $von = GUICtrlCreateInput($AngabeVON, 12, 42, 37, 21) $beschreibung = GUICtrlCreateButton("Beschreibung", 13, 72, 153, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ###
GUICtrlSetOnEvent($Start, '_start') GUICtrlSetOnEvent($Stop, '_stop') GUICtrlSetOnEvent($beschreibung, '_beschreibung') GUICtrlSetOnEvent($speichern, '_save') GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')
While Sleep(10) If $modus = True Then $hWnd = WinGetHandle("BlueStacks App Player") ControlClick($hwnd, "", "", "left",1, Random(10,25), Random(325,370)) Sleep(Random($AngabeVON,$AngabeBIS)) ControlClick($hwnd, "", "", "left",1, Random(339,355), Random(325,370)) Sleep(Random($AngabeVON,$AngabeBIS)) EndIf
WEnd
Func _exit() Exit EndFunc
Func _start() $modus = True EndFunc
Func _stop() $modus = False EndFunc
Func _save() IniWrite($ini, "Benutzerdaten", "von", GUICtrlRead($von)) IniWrite($ini, "Benutzerdaten", "bis", GUICtrlRead($bis)) EndFunc
Func _beschreibung() MsgBox(0,"Titel","Text") EndFunc
|
|
|
05/02/2015, 13:28
|
#9
|
elite*gold: 0
Join Date: Apr 2015
Posts: 8
Received Thanks: 0
|
|
|
|
 |
Similar Threads
|
Fehler suche (Anfangsprogramm) If schleife in einer If-Schleife
10/16/2013 - .NET Languages - 8 Replies
Wie mache ich eine If-Schleife in einer if-schleife?
Danke^^
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
|
Quest-> Schleife in einer Schleife?
04/15/2013 - Metin2 Private Server - 3 Replies
Hallo Community,
ist es möglich in einer bestehenden Schleife eine weitere einzufügen die unabhängig von der 1. schleife agiert?
|
Hilfe bei einer Schleife
04/21/2011 - AutoIt - 10 Replies
brauche Bitte etwas hilfe bei meiner Schleife,
und zwar geht sie bis hier her einwandfrei:
If $Goldold < $Gold Then
$Output2 = 100
_GUICtrlEdit_AppendText($EDIT1, " " & "Jippi ey jaeh Du hast gewonnen" & @CRLF)
Sleep(100)
EndIf
If $Goldold = $Gold Then
|
For-Schleife einer GUI untebrechen und mit Schließen einer andern GUI wiederaufnehmen
10/13/2010 - AutoIt - 7 Replies
Hi,
ich hab folgendes AutoIT Problemchen und komm einfach nicht weiter.
Zur Veranschauung des Problems hab ich mein eigentliches Programm mal auf einen Minimalcode reduziert.
Das Programm macht so natürlich grad keinen großen Sinn, aber ich kann euch zeigen, wo's Hakt.
Es geht darum: Ich hab ein Haupt-GUI von dem aus ich eine FOR-Schleife starte.
Nun soll pro abgearbeiteten STEP der For-Schleife die Unter-GUI gestartet und aus der For-Schleife der Wert übergeben werden.
Die...
|
All times are GMT +1. The time now is 04:32.
|
|