Timer Restwert ermitteln

  • Hey Leute,

    unzwar bastel ich mir grade ein Timer zusammen und bräuchte eure hilfe.. erstmal mein Script

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <GuiSlider.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Date.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Timer", 320, 436, 192, 114)
    $Slider1 = GUICtrlCreateSlider(16, 138, 281, 25)
    GUICtrlSetLimit(-1, 4, 0)
    $Group1 = GUICtrlCreateGroup("", 10, 125, 295, 53)
    $Group2 = GUICtrlCreateGroup("", 15, 85, 90, 35)
    $Progress1 = GUICtrlCreateProgress(0, 350, 320, 35)
    $Label2 = GUICtrlCreateLabel("1", 26, 170, 10, 17)
    $Label3 = GUICtrlCreateLabel("2", 89, 170, 10, 17)
    $Label4 = GUICtrlCreateLabel("3", 152, 170, 10, 17)
    $Label5 = GUICtrlCreateLabel("4", 216, 170, 10, 17)
    $Label6 = GUICtrlCreateLabel("5", 280, 170, 10, 17)
    $Label7 = GUICtrlCreateLabel("Zeit in Stunden", 24, 98, 76, 17)
    $Start = GUICtrlCreateButton("Start", 80, 250, 161, 41, $WS_GROUP)

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

    ;;;Manuell
    $input1 = GUICtrlCreateInput(@HOUR, 125, 10, 25, 20, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    GUICtrlSetState($input1, $GUI_DISABLE)
    $Label8 = GUICtrlCreateLabel(":", 158, 10, 5, 20)
    $input2 = GUICtrlCreateInput(@MIN, 170, 10, 25, 20, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    GUICtrlSetState($input2, $GUI_DISABLE)
    $manuellstart = GUICtrlCreateButton("Manuell Start", 120, 40, 82, 20, $WS_GROUP)
    GUICtrlSetState($manuellstart, $GUI_DISABLE)
    $manuell = GUICtrlCreateButton("->", 65, 10, 50, 20, $WS_GROUP)
    $zueruck = GUICtrlCreateButton("X", 215, 10, 20, 20, $WS_GROUP)
    GUICtrlSetState($zueruck, $GUI_DISABLE)
    ;;;;;
    $prozent = GUICtrlCreateLabel("", 150, 320, 200, 30)
    $selftime = GUICtrlCreateLabel("", 28, 163, 200, 30)
    GUICtrlSetColor(-1, 0x008000)
    GUICtrlSetFont(-1, 18, 800, 0, "Palatino Linotype")
    GUICtrlSetState($selftime, $GUI_HIDE)

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

    $selftime2 = GUICtrlCreateLabel("",225, 163, 200, 30)
    GUICtrlSetFont(-1, 18, 800, 0, "Palatino Linotype")
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetState($selftime2, $GUI_HIDE)
    $Group5 = GUICtrlCreateGroup("Aktuell", 10, 150, 120, 53)
    GUICtrlSetState($Group5, $GUI_HIDE)
    $Group6 = GUICtrlCreateGroup("Ende", 190, 150, 120, 53)
    GUICtrlSetState($Group6, $GUI_HIDE)
    $Group7 = GUICtrlCreateGroup("Verbliebene Zeit", 100, 220, 120, 53)
    GUICtrlSetState($Group7, $GUI_HIDE)
    $selftime3 = GUICtrlCreateLabel("",130, 235, 60, 25)
    GUICtrlSetState($selftime3, $GUI_HIDE)
    GUICtrlSetFont(-1, 18, 800, 0, "Palatino Linotype")

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Start
    $Sliderrueckgabewert = GUICtrlRead($Slider1)

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

    GUICtrlSetState($Slider1, $GUI_DISABLE)
    GUICtrlSetState($Start, $GUI_DISABLE)
    GUICtrlSetState($manuell, $GUI_DISABLE)

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

    $hotkey = HotKeySet("{esc}", "_exit")
    _Slider()

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

    Case $manuell
    GUICtrlSetState($input1, $GUI_enable)
    GUICtrlSetState($input2, $GUI_enable)
    GUICtrlSetState($manuellstart, $GUI_enable)
    GUICtrlSetState($zueruck, $GUI_enable)
    GUICtrlSetState($manuell, $GUI_DISABLE)
    GUICtrlSetState($Group5, $GUI_SHOW)
    GUICtrlSetState($Group6, $GUI_SHOW)
    GUICtrlSetState($Group7, $GUI_SHOW)
    GUICtrlSetState($selftime3, $GUI_SHOW)

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

    ;
    GUICtrlSetState($Start, $GUI_HIDE)
    GUICtrlSetState($Slider1, $GUI_HIDE)
    GUICtrlSetState($Label2, $GUI_HIDE)
    GUICtrlSetState($Label3, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_HIDE)
    GUICtrlSetState($Label5, $GUI_HIDE)
    GUICtrlSetState($Label6, $GUI_HIDE)
    GUICtrlSetState($Label7, $GUI_HIDE)
    GUICtrlSetState($Group1, $GUI_HIDE)
    GUICtrlSetState($Group2, $GUI_HIDE)
    GUICtrlSetState($Progress1, $GUI_HIDE)

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

    Case $zueruck
    GUICtrlSetState($Slider1, $GUI_enable)
    GUICtrlSetState($Start, $GUI_enable)
    GUICtrlSetState($manuell, $GUI_enable)
    GUICtrlSetState($input1, $GUI_DISABLE)
    GUICtrlSetState($input2, $GUI_DISABLE)
    GUICtrlSetState($manuellstart, $GUI_DISABLE)
    GUICtrlSetState($zueruck, $GUI_DISABLE)
    GUICtrlSetState($Group5, $GUI_HIDE)
    GUICtrlSetState($Group6, $GUI_HIDE)
    GUICtrlSetState($Group7, $GUI_HIDE)
    GUICtrlSetState($selftime3, $GUI_HIDE)
    GUICtrlSetState($Start, $GUI_SHOW)
    GUICtrlSetState($Slider1, $GUI_SHOW)
    GUICtrlSetState($Label2, $GUI_SHOW)
    GUICtrlSetState($Label3, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Label5, $GUI_SHOW)
    GUICtrlSetState($Label6, $GUI_SHOW)
    GUICtrlSetState($Label7, $GUI_SHOW)
    GUICtrlSetState($Group1, $GUI_SHOW)
    GUICtrlSetState($Group2, $GUI_SHOW)
    GUICtrlSetState($Progress1, $GUI_SHOW)

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

    Case $manuellstart
    $hotkey = HotKeySet("{esc}", "_exit")
    $zeitlesen = GUICtrlRead($input1)
    $zeitlesen1 = GUICtrlRead($input2)
    $stunde = GUICtrlRead($input1)
    $min = GUICtrlRead($input2)
    If $zeitlesen > 23 Then
    MsgBox(262160, "Shutdown Manager ", "Der Wert ist nicht Zulässig" & @CRLF & "Es werden nur die Werter zwischen 0-23 H zugelassen!")
    ContinueCase
    EndIf
    If $zeitlesen1 > 60 Then
    MsgBox(262160, "Shutdown Manager ", "Der Wert ist nicht Zulässig" & @CRLF & "Es werden nur die Werter zwischen 0-60 Min. zugelassen!")
    ContinueCase

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

    EndIf
    GUICtrlSetState($selftime, $GUI_SHOW)
    GUICtrlSetState($selftime2, $GUI_SHOW)
    GUICtrlSetState($input2, $GUI_DISABLE)
    GUICtrlSetState($input1, $GUI_DISABLE)
    GUICtrlSetState($zueruck, $GUI_DISABLE)
    GUICtrlSetState($manuellstart, $GUI_DISABLE)
    GUICtrlSetData($selftime2, $stunde & ":" & $min)

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

    $restwert=@HOUR&@MIN
    $restwert2=$stunde&$min

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

    While 1
    GUICtrlSetData($selftime, @HOUR & ":" & @MIN & ":" & @SEC)
    If @HOUR = $stunde And @MIN = $min Then
    Shutdown(1)
    EndIf
    $stundenwert=$restwert2-$restwert
    if $selftime < $selftime2 Then
    GUICtrlSetData($selftime3,$stundenwert)
    EndIf

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

    if $selftime > $selftime2 Then
    GUICtrlSetData($selftime3,$restwert-$restwert2)
    EndIf
    Sleep(200)
    WEnd

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

    EndSwitch

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

    WEnd

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

    Func _Slider()

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

    If $Sliderrueckgabewert == 0 Then

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

    For $i = 0 To 100 Step 1
    GUICtrlSetData($prozent, $i & " %")
    _Zeitende()
    Sleep(36000)
    GUICtrlSetData($Progress1, $i)
    Next
    MsgBox(262192, "Shutdown Manager ", "PC wird Heruntergefahren", 5)
    back()
    Shutdown(1)
    EndIf
    If $Sliderrueckgabewert == 1 Then
    For $s = 0 To 100 Step 1
    GUICtrlSetData($prozent, $s & " %")
    _Zeitende()
    Sleep(36000 * 2)
    GUICtrlSetData($Progress1, $s)
    Next
    MsgBox(262192, "Shutdown Manager ", "PC wird Heruntergefahren", 5)
    back()
    Shutdown(1)
    EndIf
    If $Sliderrueckgabewert == 2 Then
    For $a = 0 To 100 Step 1
    GUICtrlSetData($prozent, $a & " %")
    _Zeitende()
    Sleep(36000 * 3)
    GUICtrlSetData($Progress1, $a)
    Next
    MsgBox(262192, "Shutdown Manager ", "PC wird Heruntergefahren", 5)
    back()
    Shutdown(1)
    EndIf
    If $Sliderrueckgabewert == 3 Then
    For $b = 0 To 100 Step 1
    GUICtrlSetData($prozent, $b & " %")
    _Zeitende()
    Sleep(36000 * 4)
    GUICtrlSetData($Progress1, $b)
    Next
    MsgBox(262192, "Shutdown Manager ", "PC wird Heruntergefahren", 5)
    back()
    Shutdown(1)
    EndIf
    If $Sliderrueckgabewert == 4 Then
    For $c = 0 To 100 Step 1
    GUICtrlSetData($prozent, $c & " %")
    _Zeitende()
    Sleep(36000 * 5)
    GUICtrlSetData($Progress1, $c)
    Next
    MsgBox(262192, "Shutdown Manager ", "PC wird Heruntergefahren", 5)
    back()
    Shutdown(1)
    EndIf
    EndFunc ;==>_Slider

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

    Func _exit()
    $msgbox = MsgBox(262180, "Shutdown Manager ", "Shutdown Manager beenden?")
    If $msgbox == 6 Then
    Exit
    EndIf

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

    EndFunc ;==>_exit

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

    Func back()
    GUICtrlSetState($Slider1, $GUI_enable)
    GUICtrlSetState($Start, $GUI_enable)
    GUICtrlSetData($Progress1, -100)
    EndFunc ;==>back

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

    Func _Zeitende()
    $antwortprogressbar = GUICtrlRead($Progress1)

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

    If $antwortprogressbar = 80 Then
    TrayTip("Shutdown Manager", "Rechner wird in kürze heruntergefahren", 0, 1)
    Sleep(10000)
    TrayTip("Leert einen Traytip", "", 0)
    EndIf
    EndFunc ;==>_Zeitende

    [/autoit]

    ich will das im Label Verbliebenezeit($selftime3) die zeit rein kommt wann der Rechner Herunterfährt. Sprich die Restzeit. Ich habe viel versucht, jedoch ist mir das nicht gelungen... Das Problem liegt dadrinne, das ich es nicht im Stunden und Minuten Format wieder geben kann(0-24Std_0-60Min)

    Ich hoffe ihr könnt mir weiter helfen! Ich weiss, das mein Script durcheinander ist, bin ja noch Anfänger :)

    Einmal editiert, zuletzt von Baris (28. Juli 2010 um 09:38)

  • [autoit]

    TimerInit
    TimerDiff
    _TicksToTime

    [/autoit]


    Die Befehle sollten dir helfen ;)

    [autoit]

    $restwert=@HOUR&@MIN
    $restwert2=$stunde&$min
    $stunde2=Round(100/60,1)

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

    While 1
    GUICtrlSetData($selftime, @HOUR & ":" & @MIN & ":" & @SEC)
    If @HOUR = $stunde And @MIN = $min Then
    Shutdown(1)
    EndIf
    $stundenwert=$restwert2-$restwert

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

    if $selftime < $selftime2 Then
    GUICtrlSetData($selftime3,$stundenwert)

    EndIf

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

    if $selftime > $selftime2 Then
    GUICtrlSetData($selftime3,$restwert-$restwert2)
    EndIf

    [/autoit]

    So sieht die schleife gerade aus... ich weiss jetzt leider nicht wie ich die Befehle da rein bauen soll :( kannst du mir ein beispiel zeigen ?

  • mal ein tipp

    mach anstatt diesem @Hour...

    lieber ein Include<Date.au3> und verwende die Funktion _Now oder _Nowdate

    dann kannst du es auch mit TimerDiff machen

    Ich glaube (weiß aber nicht) wenn dus damit machst, kannst dus auch einfach mit
    $Start=_Now
    ...(Zeit)
    $End=_Now

    und dann $End-$Start
    musst du mal ausprobieren

  • Das Problem ist ja jetzt eher, das ich die Restzeit nicht so einfach raus bekomme... Bsp. wir haben jetzt 12:50 ,der Rechner soll um 14:30 Herunterfahren, das wären bis dahin 90 min.

    Ich habe erstmal versucht, es so berrechen zu lassen <1250-1430> das geht aber nicht da die Minuten bis 60 gehen... was wäre die Lösung da ? :S

    • Offizieller Beitrag

    Guck mal, das habe ich mal in einem CountDown verwendet:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    HotKeySet('!e', '_ende') ; Alt+e zum Beenden

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

    Local $t, $diff, $message, $sShutDownTime = '2010/07/30 13:30:00'

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

    $t = TimerInit()
    While True
    If TimerDiff($t) >= 1000 Then
    $diff = _DateDiff('s', _NowCalc(), $sShutDownTime)
    Select
    Case $diff < 60
    ToolTip(StringFormat('%02u', $diff) & ' s')
    Case $diff < 60*60
    $message = StringFormat('%02u', Floor($diff/60)) & ':' & _
    StringFormat('%02u', Mod($diff,60)) & ' min'
    ToolTip($message)
    Case $diff < 60*60*24
    $message = StringFormat('%02u', Floor($diff/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($diff,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($diff,3600),60)) & ' h'
    ToolTip($message)
    Case Else
    $message = Floor($diff/86400) & ' d / ' & _
    StringFormat('%02u', Floor(Mod($diff,86400)/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod(Mod($diff,86400),3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod(Mod($diff,86400),3600),60)) & ' h'
    ToolTip($message)
    EndSelect
    $t = TimerInit()
    EndIf
    WEnd

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

    Func _ende()
    Exit
    EndFunc

    [/autoit]