Hi,
Ich hatte mir mal ein kleines Shutdown script mit GUI geschrieben, aber den Code war weg, und es waren nen paar kleine unfeinheiten drinn. In dem Fall kamen die dadurch, dass ich mir dem Eventmode gearbeitet hatte. Um präzisere Aufrufe formulieren zu können habe ich dieses mal mit der Msg-loop gearbeitet. An sich sollte der Code Funktionieren, doch es gibt ein paar Fehler.
1. Wenn man startet, dann auf Pause drückt, und dann wieder fortsetzt, schmiert er mit der meldung, "use of undeclared Variable (line 83)" ab
2. Reagiert er auf Abbrechen nicht
3. Reagiert überhaupt alles zu langsam, wenn man sich in runTimer befindet.
4. Schmiert er mit "C:\Programme\AutoIt3\Include\WinApi.au3 (3104) : ==> Variable used without being declared.:
Local $tOFN = DllStructCreate($tagOPENFILENAME)" ab, wenn man auf durchsuchen drückt
Mir ist bewusst, dass es immer ein nur jedes 100stel der zeit regieren kann, aber es kommt schon mal vor, dass er die Progress bar 2-3mal updatet bevor er reagiert, und das ist ja dann definitiv zu spät.
Hier der Code:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.0.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Timer", 410, 296, 192, 124)
$Group1 = GUICtrlCreateGroup("Aktion", 232, 16, 153, 105)
$Shutdown = GUICtrlCreateRadio("Herunterfahren", 248, 32, 121, 17)
$PlaySound = GUICtrlCreateRadio("Sound abspielen", 248, 56, 129, 25)
$RUN = GUICtrlCreateRadio("Script/Anwendung/CMD-Command Ausführen", 248, 88, 105, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Zeit", 16, 16, 153, 105)
$Label1 = GUICtrlCreateLabel("Stunden:", 32, 40, 47, 17)
$Hours = GUICtrlCreateInput("", 88, 40, 49, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
$Label2 = GUICtrlCreateLabel("Minuten", 32, 80, 42, 17)
$mins = GUICtrlCreateInput("", 88, 80, 49, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$StartPause = GUICtrlCreateButton("Start", 96, 248, 89, 25, $WS_GROUP)
$CancelQuit = GUICtrlCreateButton("Beenden", 204, 248, 97, 25, $WS_GROUP)
$Progress1 = GUICtrlCreateProgress(24, 208, 353, 25)
$Group3 = GUICtrlCreateGroup("Pfad/Befehl", 16, 136, 369, 57)
$Path = GUICtrlCreateInput("", 24, 160, 273, 21)
$Durchsuchen = GUICtrlCreateButton("Durchsuchen", 304, 160, 73, 25, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $StartPause
runTimer()
Case $CancelQuit
Exit
Case $Durchsuchen
Durchsuchen()
EndSwitch
WEnd
#include <WinApi.au3>
[/autoit] [autoit][/autoit] [autoit]Global $Abbrechen = False
Global $Time
Func runTimer()
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($StartPause, "Pause")
GUICtrlSetData($CancelQuit, "Abbrechen")
$Time = GUICtrlRead($Hours)*3600 + GUICtrlRead($mins)*60
[/autoit] [autoit][/autoit] [autoit]local $count = 0
[/autoit] [autoit][/autoit] [autoit]while($count < 100)
sleep(($Time/100)*1000)
GUICtrlSetData($Progress1, $count)
$count += 1
$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Switch $nMsg
Case $StartPause
Pause()
if($Abbrechen == true) then
$Abbrechen = false
Return
EndIf
Case $CancelQuit
GUICtrlSetData($StartPause, "Start")
GUICtrlSetData($CancelQuit, "Beenden")
GUICtrlSetData($Progress1, 0)
Return
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc
Func Pause()
$Running = False
GUICtrlSetData($StartPause, "Fortsetzen")
[/autoit] [autoit][/autoit] [autoit]while true
$nMsg = GUIGetMsg()
Switch $nMsg
Case $StartPause
Return
Case $CancelQuit
$Abbrechen = true
GUICtrlSetData($StartPause, "Start")
GUICtrlSetData($CancelQuit, "Beenden")
GUICtrlSetData($Progress1, 0)
Return
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func Durchsuchen()
local $Ret = _WinAPI_GetOpenFileName("Wähle eine Datei")
if($Ret[0] <> 0) Then
GUICtrlSetData($Path, $Ret[2])
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]