Mehrer Probleme mit Folgendem Code

  • 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
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #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 ###

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Case $StartPause
    runTimer()
    Case $CancelQuit
    Exit
    Case $Durchsuchen
    Durchsuchen()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    #include <WinApi.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Abbrechen = False
    Global $Time

    [/autoit] [autoit][/autoit] [autoit]

    Func runTimer()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($StartPause, "Pause")
    GUICtrlSetData($CancelQuit, "Abbrechen")

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nMsg
    Case $StartPause
    Pause()
    if($Abbrechen == true) then
    $Abbrechen = false
    Return
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $CancelQuit
    GUICtrlSetData($StartPause, "Start")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    Return

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Pause()
    $Running = False

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Einmal editiert, zuletzt von Ryu 1991 (26. Mai 2009 um 12:49)

  • Das mit der Geschwindigkeit könnte mit deinem Format zusammen hängen, benutz mal Tidy und formatiere dein Skript.
    Ich denke dir sollten einige Fehler bereits beim formatieren auffallen. ^^

  • Ich habe jetzt Tidy mal angeklickt, das hat aber nichts bewirkt außer, dann jetzt hinter jeder funktion sowas steht: ;==>runTimer

    Was soll es denn machen?

    (Falls es die Zeilen einrücken würde, die sind schon längst eingerückt. Das ist nur irgendwie beim Posten verloren gegangen)

  • Hallo Ryu 1991,

    das ist das erstemal, das ich höre mit MsgLoop könnte man präzisere Aufrufe formulierem, das Gegentei ist meines Erachtens nach der Fall.

    Zu 1. setze Opt('MustDeclareVars',1) als 1. Zeile nach den Includes, dadurch kannst du nicht vergessen Variablen zu definieren
    zu 2. daran dürfte deine Formel für sleep schuld sein, der Abbrechen-Button funktioniert, er muss halt warten bis er dran kommt, setze hier einen statischen Wert ein z.B. 250 du musst dann aber die Formel für Progress umschreiben und die while Bedingung abändern. Mit TimerInit und TimerDiff kannst du es besser lösen als mit einem Schleifenzähler.
    3. erledigt sich wenn du 2 erledigt hast

    mfg (Auto)Bert

  • Also, ich denke, dass man mit der Message-Loop präziser arbeiten kann, weil man einem Event situationsabhängig unterschiedliche Funktionen zuweisen kann. Mir ist nicht bekannt, dass das im Event mode geht.

    Ich habe auch das Opt eingefügt, das hat nichts geändert, $abbrechen war ja declariert. Ich habe jetzt sämmtliche Global-Declarationen ganz nach oben geschoben, das geht jetzt. Und dass alles so langsam geht liegt nicht an meinem Sleep. Ich habe es bis jetzt immer mit 1 min getestet, d.h. er schaut alle 0,6 secunden nach den Messages, der Pause Button braucht aber ehr 5-10 Sekunden, Außerdem wird der Progress mehrfach upgedatet.
    Ach ja, und um auf Start zu reagieren braucht er auch seine Weile, und da habe ich ja nun noch nichts beeinflusst

    Edit: Allerdings hast du natürlich recht, dass ich das am Ende anders machen muss, ich habe das auch nur jetzt erst noch so, weil das schneller ging und zum testen ist, später werde ich ihn halbsekündlich reagieren lassen

    2 Mal editiert, zuletzt von Ryu 1991 (25. Mai 2009 um 18:28)

  • Obwohl er so langsam ist bringt er CPU-Auslastung 0%
    Könntet ihr das script vielleicht mal mit einer Min testen, und mir sagen, ob es auch bei euch so langsam ist?

  • Hallo Ryu 1991,

    teste mal folgendes Skript:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    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>
    #include <WinApi.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Abbrechen = False
    Global $Time

    [/autoit] [autoit][/autoit] [autoit]

    #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 ###

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Case $StartPause
    runTimer()
    Case $CancelQuit
    Exit
    Case $Durchsuchen
    Durchsuchen()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func runTimer()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($StartPause, "Pause")
    GUICtrlSetData($CancelQuit, "Abbrechen")

    [/autoit] [autoit][/autoit] [autoit]

    $Time = GUICtrlRead($Hours) * 3600 + GUICtrlRead($mins) * 60

    [/autoit] [autoit][/autoit] [autoit]

    Local $count = 0

    [/autoit] [autoit][/autoit] [autoit]

    While ($count < $time * 100000)
    Sleep($Time )
    GUICtrlSetData($Progress1, $count)
    $count += 1

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nMsg
    Case $StartPause
    Pause()
    If ($Abbrechen == True) Then
    $Abbrechen = False
    Return
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $CancelQuit
    GUICtrlSetData($StartPause, "Start")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    Return

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>runTimer

    [/autoit] [autoit][/autoit] [autoit]

    Func Pause()
    $Running = False

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Pause

    [/autoit] [autoit][/autoit] [autoit]

    Func Durchsuchen()
    Local $Ret = _WinAPI_GetOpenFileName("Wähle eine Datei")
    If ($Ret[0] <> 0) Then
    GUICtrlSetData($Path, $Ret[2])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Durchsuchen

    [/autoit]


    Darin reagieren die Buttons schnell, ich weiß aber dass es bei langen Zeiten Probleme bereiten wird. Du must dir dringend eine ander Schleifenbedingung definieren z.B. über TimerInit und TimerDiff

    mfg (Auto)Bert

  • Ok, das gepostete Script läuft auch bei mir schnelle, ich habe keine Änderung zu meinem Entdeckt außer der While schleife (war das alles?).
    Deshalb habe ich meine jetzt auch angepasst, sie sieht jetzt so aus:

    [autoit]

    while(_Timer_Diff($timer)/1000 < $time)
    sleep(500)
    GUICtrlSetData($Progress1, ((_Timer_Diff($timer)/1000)/$time)*100 )

    [/autoit][autoit][/autoit][autoit]

    $nMsg = GUIGetMsg()

    [/autoit][autoit][/autoit][autoit]

    Switch $nMsg
    Case $StartPause
    Pause()
    if($Abbrechen == true) then
    $Abbrechen = false
    Return
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Case $CancelQuit
    GUICtrlSetData($StartPause, "Start")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    Return

    [/autoit][autoit][/autoit][autoit]

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Allerdings geht es immer noch nicht schneller, was hast du noch geändert?

    Ach ja, kurz zu dieser Zeile: "GUICtrlSetData($Progress1, ((_Timer_Diff($timer)/1000)/$time)*100 )"
    Mit dem /1000 mache ich aus Millisekunden Sekunden, dann teile ich es durch die Gesammt zeit, und Multipliziere es mit Hundert, somit habe ich den Entsprechenden Prozentwert.

    Wo ist eigentlich der Unterschied zwischen den nativ Timer funktionen und den UDFs ?

    EDIT: habs es lag an dem sleep 500. Das war ihm anscheinend zu lange, keine Ahnung warum, das macht keinen sinn, bei 500 müsste er 2mal pro sekunde testen, und er reagiert trotzdem erst nach 5-10 sec :thumbdown: . Naja, ohne sleep gehts wunderbar, ich werde jetzt mal mit den werten experimentieren..
    Ne antwort auf die UDF Frage wäre trotzdem nice :D :thumbup:

    EDIT2: Ich habe das sleep jetzt ganz raus gemacht, da auch ohne sleep immer noch CPU Auslastung 0 ist.

    2 Mal editiert, zuletzt von Ryu 1991 (25. Mai 2009 um 20:02)

  • Hallo Ryu 1991,

    Zitat

    Ok, das gepostete Script läuft auch bei mir schnelle, ich habe keine Änderung zu meinem Entdeckt außer der While schleife (war das alles?).

    [autoit]

    While ($count < $time * 100000) ;könnte zu Überlauf führen
    Sleep($Time )

    [/autoit]

    so hatte ich abgeändert, damit es wenigstens mit kleinen Minutenweren geht, die Variable $count darf nicht größer als 2^32 (vielleicht auch 2^64, dann wäre alles klar) werden also länger als ca. 42.000 Minuten in die Zukunft darfst du den Timer nicht stellen, trotzdem bin ich immer noch der Meinung, dass der sleep zu ungenau ist (gibts auch irgenwo im Forum Hilfe schon mal ein Thead)

    Zitat

    Ich habe das sleep jetzt ganz raus gemacht, da auch ohne sleep immer noch CPU Auslastung 0 ist

    und wie berechnest du jetzt den Fortschritt?

    mfg (Auto)Bert

  • Hi, ich berechne das jetzt, in dem ich vor der Schleife einen Timer initialisiere, und dann die schleife so lange laufen lasse, wie die vergangene Zeit kleiner ist, als die zu wartende zeit. Dadurch wird immer die richtige zeit lang gewartet.
    Und die Progressbar lass ich anzeigen, in dem ich den prozentwert der Vergangenen Zeit ausrechne. Das habe ich in meinem Letzten post schon erklärt.

    Mich würde jetzt noch brennend interessieren, wo der unterschied von den UDFs von den Sound- und Timerfunktionen zu den normalen ist.
    EDIT: Ok, das tool ist fertig, Hier der Code für alle die es interessiert:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit]

    #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>
    #include <WinApi.au3>
    #include <Timers.au3>
    #include <Sound.au3>
    #include <constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt('TrayAutoPause', 0)
    Opt('TrayOnEventMode', 1)
    Opt('TrayMenuMode', 1)
    Opt('GUIEventOptions', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Abbrechen = False, $running = false, $pause = false
    Global $Time, $timer, $ptime, $pausetime = 0
    Global $End, $Resize

    [/autoit] [autoit][/autoit] [autoit]

    Global $Form1, $Group1, $Shutdown, $PlaySound, $RUN, $Group2, $Label1, $Hours, $Label2, $mins, $StartPause, $CancelQuit, $Progress1, $Group3, $Path, $Durchsuchen, $nMsg
    #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)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $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 ###

    [/autoit] [autoit][/autoit] [autoit]

    TraySetClick ( 8 )
    $End = TrayCreateItem("Beenden")
    $Resize = TrayCreateItem("Wiederherstellen")
    TrayItemSetOnEvent($End, "End")
    TrayItemSetOnEvent($Resize, "Anzeigen")
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "Anzeigen")
    TraySetOnEvent($TRAY_EVENT_MOUSEOVER, "CreateTooltip")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $GUI_EVENT_MINIMIZE
    GUISetState(@SW_HIDE, $Form1)
    Case $StartPause
    runTimer()
    Case $CancelQuit
    Exit
    Case $Durchsuchen
    Durchsuchen()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func runTimer()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($StartPause, "Pause")
    GUICtrlSetData($CancelQuit, "Abbrechen")

    [/autoit] [autoit][/autoit] [autoit]

    $Time = GUICtrlRead($Hours)*3600 + GUICtrlRead($mins)*60
    $timer = _Timer_Init()
    $running = true
    $pausetime = 0

    [/autoit] [autoit][/autoit] [autoit]

    while(((_Timer_Diff($timer)/1000)-$pausetime) < $time)
    GUICtrlSetData($Progress1, (((_Timer_Diff($timer)/1000)-$pausetime)/$time)*100 )

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nMsg
    Case $StartPause
    Pause()
    if($Abbrechen == true) then
    $Abbrechen = false
    Return
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $CancelQuit
    GUICtrlSetData($StartPause, "Start")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    $running = false
    Return

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    case $GUI_EVENT_MINIMIZE
    GUISetState(@SW_HIDE, $Form1)
    EndSwitch
    WEnd
    TimeOver()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Pause()
    GUICtrlSetData($StartPause, "Fortsetzen")
    $pause = true
    $ptime = _Timer_Init()

    [/autoit] [autoit][/autoit] [autoit]

    while true
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $StartPause
    GUICtrlSetData($StartPause, "Pause")
    $pausetime += _Timer_Diff($ptime)/1000
    $pause = false
    Return

    [/autoit] [autoit][/autoit] [autoit]

    Case $CancelQuit
    $Abbrechen = true
    GUICtrlSetData($StartPause, "Start")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    $running = false
    Return

    [/autoit] [autoit][/autoit] [autoit]

    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    case $GUI_EVENT_MINIMIZE
    GUISetState(@SW_HIDE, $Form1)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Durchsuchen()
    local $Ret = _WinAPI_GetOpenFileName("Wähle eine Datei", "Alle Dateien (*.*)", @HomeDrive)
    if($Ret[0] <> 0) Then
    GUICtrlSetData($Path, $Ret[1]&"\"&$Ret[2])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func TimeOver()

    [/autoit] [autoit][/autoit] [autoit]

    if(GUICtrlRead($Shutdown) == $GUI_CHECKED) Then
    Shutdown(5)
    ElseIf(GUICtrlRead($PlaySound) == $GUI_CHECKED)Then
    _SoundPlay(_SoundOpen(GUICtrlRead($Path)))
    if(@error == 1) Then
    MsgBox(0, "Timer", "Konnte Sound nicht abspielen."&@CRLF&"Möglicherweise nicht vorhanden, oder ungültiges Format?")
    EndIf
    ElseIf(GUICtrlRead($RUN) == $GUI_CHECKED)Then
    Run(GUICtrlRead($Path))
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($StartPause, "Starten")
    GUICtrlSetData($CancelQuit, "Beenden")
    GUICtrlSetData($Progress1, 0)
    $running = false

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Anzeigen()
    GUISetState(@SW_SHOW, $Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func End()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func CreateTooltip()
    local $nachricht
    local $StayedTime
    local $title

    [/autoit] [autoit][/autoit] [autoit]

    if($running == true And $pause == false) then
    $title = "Verbleibende Zeit:"
    $StayedTime = $Time - _Timer_Diff($timer)/1000 + $pausetime
    elseif($pause == true and $running == true) Then
    $title = "Pausiert - Verbleibende Zeit:"
    $StayedTime = $Time - _Timer_Diff($timer)/1000 + _Timer_Diff($ptime)/1000 + $pausetime
    elseif($running == false) then
    $title = "Timer läuft nicht"
    $StayedTime = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    local $Stunden = Int($StayedTime / 3600)
    local $Minuten = Int(($StayedTime - $Stunden*3600)/60)
    local $Secunden = Int($StayedTime - $Stunden*3600 - $Minuten*60)

    [/autoit] [autoit][/autoit] [autoit]

    $nachricht = $Stunden&":"&$Minuten&":"&$Secunden

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip($title, $nachricht, 1, 1)
    TrayTip("", "", 1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;Todo: Bei Pause und Abbruch Zeit im Traytip anhalten, sowie Traytip begrenzen

    [/autoit]

    Einmal editiert, zuletzt von Ryu 1991 (26. Mai 2009 um 12:44)