1-Click-Shutdown

  • Hallo zusammen :)
    Ich habe früher immer gerne einen Shutdown mit der Shutdown.exe von Windows eingebaut, wenn mein PC mal länger anbleiben sollte. Seit ich nun aber Windows 7 Habe gefällt mir dieses Programm nicht mehr, und ich habe mir vorgenommen ein Autoit-Script zu schreiben, dass mir wieder besser gefällt und auch einfacher zu bedienen ist. Dazu muss ich sagen, dass meine Erfahrungen in Sachen AutoIt noch nicht sehr weit Fortgeschritten sind, ich bin also ein ziemlicher Anfänger darin.

    Nun kommen wir zu meinem Problem.Ich habe natürlich versucht, eine Uhr einzubauen, die Ablaüft bis der Shutdown startet. In den meisten fällen funktioniert das auch Ganz normal.
    Das sieht dann in etwa so aus:
    [Blockierte Grafik: http://image-upload.de/get/DhJb58/2af834a6ba.png
    Es gibt allerdings immer wieder zwischendurch einen Fehler. Anstatt die nächst tiefere Zahl anzuzeigen werden dann einfach ein Paar neunen oder auch nullen angehangen. Es stellt von der Zeit her kein Problem da, die läuft exakt richtig allerdings ist es Optisch sehr Unschön. :S
    Damit ihr wisst was ich meine:
    [Blockierte Grafik: http://image-upload.de/get/cgUvua/65e59d838e.png
    Eigentlich sollte dor 8:51:46 stehen.
    Da ich selbst nicht Herausfinden kann, wie dieser Fehler zu beheben ist, hoffe ich hier auf Hilfe :)
    Der Source-Code sieht folgendermassen aus:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=clock.ico
    #AutoIt3Wrapper_Outfile=EXE\Shutdown.exe
    #AutoIt3Wrapper_Res_Description=Ein Programm mit dem das Zeitliche Herunterfahren ein Kinderspiel wird.
    #AutoIt3Wrapper_Res_Fileversion=0.1.6.1509
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <time.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIComboBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #include <Date.au3>
    Opt("TrayMenuMode", 1)

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

    Global $Cfg
    Global $Shutdown
    Global $Shtd
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Shutdown", 217, 199, -1, -1)
    $Button1 = GUICtrlCreateButton("Letzte Einstellungen starten", 16, 72, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Startet einen Shutdown mit den zuletzt gespeicherten Daten.")
    $Button2 = GUICtrlCreateButton("Einstellungen", 16, 112, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Einstellungen um einen Benutzerdefinierten Shutdown zu generieren.")
    $Button3 = GUICtrlCreateButton("Laufenden Shutdown abbrechen", 16, 152, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Ein laufender Shutdown wird abgebrochen. Benötigt möglicherweise ein Passwort.")
    $Label1 = GUICtrlCreateLabel("Bitte die auszuführende", 8, 8, 201, 27)
    GUICtrlSetFont(-1, 16, 400, 0, "Times New Roman")
    $Label2 = GUICtrlCreateLabel("Aktion wählen.", 40, 40, 130, 27)
    GUICtrlSetFont(-1, 16, 400, 0, "Times New Roman")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button2
    GUIDelete($Form1)
    _Einst()
    Case $Button1
    GUIDelete($Form1)
    _Start()
    Case $Button3
    _Abbrechen()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func _Abbrechen()
    If WinExists("1 Click Shutdown") Then
    ProcessClose("Shutdown.exe")
    Else
    MsgBox(48, "1-Click Shutdown", "Es läuft kein Shutdown.")
    EndIf
    EndFunc ;==>_Abbrechen
    Func _Einst()
    If FileExists("shutdown.cfg") Then
    _FileReadToArray("shutdown.cfg", $Cfg)
    $Shtd = 1
    EndIf
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Main.kxf
    $Form1 = GUICreate("1-Click Shutdown - Einstellungen", 330, 197, -1, -1)
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Group1 = GUICtrlCreateGroup("Shutdownart", 8, 0, 145, 65)
    GUICtrlSetTip(-1, "")
    $Combo1 = GUICtrlCreateCombo("Herunterfahren", 16, 16, 129, 25)
    GUICtrlSetTip(-1, "Art des Shutdowns")
    GUICtrlSetData(-1, "Neustarten|Abmelden|Standby|Ruhezustand")
    $Checkbox1 = GUICtrlCreateCheckbox("Force Shut", 16, 40, 97, 17)
    GUICtrlSetTip(-1, "Erzwingt das schliessen aller Programme")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Zeit", 8, 64, 145, 73)
    $Combo2 = GUICtrlCreateCombo("Eigene Zeit (Min)", 16, 80, 129, 25)
    GUICtrlSetTip(-1, "Zeit bis zum Shutdown")
    GUICtrlSetData(-1, "15 Minuten|30 Minuten|45 Minuten|1 Stunde|2 Stunden|3 Stunden|5 Stunden")
    $Edit1 = GUICtrlCreateEdit("", 16, 112, 129, 17, BitOR($ES_RIGHT, $ES_WANTRETURN, $ES_NUMBER))
    GUICtrlSetTip(-1, "Zeit in Minuten")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Meldung", 160, 0, 161, 81)
    $Edit2 = GUICtrlCreateEdit("", 168, 16, 145, 57, $ES_WANTRETURN)
    GUICtrlSetTip(-1, "Meldung im Shutdownfenster")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Einstellungen speichern", 8, 144, 129, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Speichert die aktuellen Einstellungen")
    $Button2 = GUICtrlCreateButton("Shutdown starten", 144, 144, 129, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Startet den Shutdown mit den aktuellen Einstellungen")
    $Button3 = GUICtrlCreateButton("Exit", 280, 144, 41, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Schliesst das Programm")
    $Button4 = GUICtrlCreateButton("Shutdown abbrechen", 8, 169, 313, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Bricht einen laufenden Shutdown ab.")
    $Group4 = GUICtrlCreateGroup("Passwort zum Abbrechen", 160, 96, 161, 41)
    $Edit3 = GUICtrlCreateEdit("", 168, 112, 145, 17, $ES_WANTRETURN)
    GUICtrlSetTip(-1, "Passwort. Noch nicht Implementiert")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    If $Shtd = 1 Then
    $Inx = _GUICtrlComboBox_FindString($Combo1, _StringEncrypt(0, $Cfg[1], "Safe", 4))
    _GUICtrlComboBox_SetCurSel($Combo1, $Inx)
    If Not StringInStr(_StringEncrypt(0, $Cfg[2], "Safe", 4), "Own") Then
    $Inx = _GUICtrlComboBox_FindString($Combo2, _StringEncrypt(0, $Cfg[2], "Safe", 4))
    _GUICtrlComboBox_SetCurSel($Combo2, $Inx)
    Else
    $sCfg2 = StringSplit(_StringEncrypt(0, $Cfg[2], "Safe", 4), "|")
    GUICtrlSetData($Edit1, $sCfg2[2])
    EndIf
    If $Cfg[0] > 2 Then
    GUICtrlSetData($Edit3, _StringEncrypt(0, $Cfg[3], "Safe", 4))
    EndIf
    If $Cfg[0] > 3 Then
    GUICtrlSetData($Edit2, _StringEncrypt(0, $Cfg[4], "Safe", 4))
    EndIf
    If _StringEncrypt(0, $Cfg[5], "Safe", 4) = "Force" Then
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    EndIf
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $Zeit = GUICtrlRead($Combo2)
    If $Zeit <> "Eigene Zeit (Min)" Then
    If GUICtrlGetState($Edit1) = 80 Then
    GUICtrlSetState($Edit1, $GUI_DISABLE)
    EndIf
    Else
    If GUICtrlGetState($Edit1) = 144 Then
    GUICtrlSetState($Edit1, $GUI_ENABLE)
    EndIf
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $SArt = ""
    $Time = ""
    $Msg = ""
    $PW = ""
    $Force = ""
    $SArt = GUICtrlRead($Combo1)
    $Time = GUICtrlRead($Combo2)
    If $Time = "Eigene Zeit (Min)" Then
    $Time = "Own|" & GUICtrlRead($Edit1)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit2)) Then
    $Msg = GUICtrlRead($Edit2)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit3)) Then
    $PW = GUICtrlRead($Edit3)
    EndIf
    If GUICtrlRead($Checkbox1) = 1 Then
    $Force = "Force"
    EndIf
    If FileExists("shutdown.cfg") Then
    FileDelete("shutdown.cfg")
    EndIf
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $SArt, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Time, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $PW, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Msg, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Force, "Safe", 4))
    Case $Button2
    ToolTip("")
    $SArt = ""
    $Time = ""
    $Msg = ""
    $PW = ""
    $SArt = GUICtrlRead($Combo1)
    $Time = GUICtrlRead($Combo2)
    If $Time = "Eigene Zeit (Min)" Then
    $Time = GUICtrlRead($Edit1)
    ElseIf $Time = "15 Minuten" Then
    $Time = 15
    ElseIf $Time = "30 Minuten" Then
    $Time = 30
    ElseIf $Time = "45 Minuten" Then
    $Time = 45
    ElseIf $Time = "1 Stunde" Then
    $Time = 60
    ElseIf $Time = "2 Stunden" Then
    $Time = 120
    ElseIf $Time = "3 Stunden" Then
    $Time = 180
    ElseIf $Time = "5 Stunden" Then
    $Time = 300
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit2)) Then
    $Msg = GUICtrlRead($Edit2)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit3)) Then
    $PW = GUICtrlRead($Edit3)
    EndIf
    GUIDelete($Form1)
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Shtd.kxf
    $Form2 = GUICreate("1 Click Shutdown", 170, 158, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Label1 = GUICtrlCreateLabel("1-Click Shutdown", 8, 8, 87, 17)
    $Label2 = GUICtrlCreateLabel($SArt, 16, 32, 91, 17)
    $Label3 = GUICtrlCreateLabel("Noch: ZEIT", 104, 32, 60, 34)
    $Label5 = GUICtrlCreateLabel("Startet um: ZEITZEITZEITZEIT", 29, 145)
    WinSetOnTop("1 Click Shutdown", "", 1)
    If $Msg <> "" Then
    $Group1 = GUICtrlCreateGroup("Meldung", 8, 56, 153, 89)
    $Label4 = GUICtrlCreateLabel($Msg, 16, 72, 137, 64)
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Start1 = _CalcTime($Time)
    $Start2 = StringSplit($Start1, ":")
    If $Start2[2] + @MIN < 60 Then
    $Minut = $Start2[2] + @MIN
    $Stund = $Start2[1] + @HOUR
    Else
    $Minut = $Start2[2] + @MIN - 60
    $Stund = $Start2[1] + @HOUR + 1
    EndIf
    $Sekund = $Start2[3] + @SEC
    $Start = $Stund & ":" & $Minut & ":" & $Sekund
    GUICtrlSetData($Label5, "Startet um: " & $Start)
    $SECS = $Time * 60
    For $i = $SECS To 0 Step -1
    $Noch = _CalcTime($i / 60)
    GUICtrlSetData($Label3, "Noch: " & $Noch)
    Sleep(1000)
    Next
    If $Cfg[5] = "Force" Then
    If $SArt = "Herunterfahren" Then
    Shutdown(5)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(6)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(4)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(36)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(68)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    Else
    If $SArt = "Herunterfahren" Then
    Shutdown(1)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(2)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(0)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(32)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(64)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    EndIf
    Case $Button3
    Exit
    Case $Button4
    If WinExists("1 Click Shutdown") Then
    ProcessClose("Shutdown.exe")
    Else
    MsgBox(48, "1-Click Shutdown", "Es läuft kein Shutdown.")
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>_Einst
    Func _Start()
    If FileExists("shutdown.cfg") Then
    _FileReadToArray("shutdown.cfg", $Cfg)
    $SArt = _StringEncrypt(0, $Cfg[1], "Safe", 4)
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Shtd.kxf
    $Form2 = GUICreate("1 Click Shutdown", 170, 158, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Label1 = GUICtrlCreateLabel("1-Click Shutdown", 8, 8, 87, 17)
    $Label2 = GUICtrlCreateLabel($SArt, 16, 32, 91, 17)
    $Label3 = GUICtrlCreateLabel("Noch: ZEIT", 104, 32, 60, 34)
    WinSetOnTop("1 Click Shutdown", "", 1)
    If _StringEncrypt(0, $Cfg[4], "Safe", 4) <> "" Then
    $Group1 = GUICtrlCreateGroup("Meldung", 8, 56, 153, 89)
    $Label4 = GUICtrlCreateLabel(_StringEncrypt(0, $Cfg[4], "Safe", 4), 16, 72, 137, 64)
    EndIf
    $Label5 = GUICtrlCreateLabel("Startet um: ZEITZEITZEITZEIT", 29, 145)

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

    If StringInStr(_StringEncrypt(0, $Cfg[2], "Safe", 4), "Own") Then
    $sCfg2 = StringSplit(_StringEncrypt(0, $Cfg[2], "Safe", 4), "|")
    $Time = $sCfg2[2]
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "15 Minuten" Then
    $Time = 15
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "30 Minuten" Then
    $Time = 30
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "45 Minuten" Then
    $Time = 45
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "1 Stunde" Then
    $Time = 60
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "2 Stunden" Then
    $Time = 120
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "3 Stunden" Then
    $Time = 180
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "5 Stunden" Then
    $Time = 300
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Start1 = _CalcTime($Time)
    $Start2 = StringSplit($Start1, ":")
    If $Start2[2] + @MIN < 60 Then
    $Minut = $Start2[2] + @MIN
    $Stund = $Start2[1] + @HOUR
    Else
    $Minut = $Start2[2] + @MIN - 60
    $Stund = $Start2[1] + @HOUR + 1
    EndIf
    $Sekund = $Start2[3] + @SEC
    $Start = $Stund & ":" & $Minut & ":" & $Sekund
    GUICtrlSetData($Label5, "Startet um: " & $Start)
    $SECS = $Time * 60
    For $i = $SECS To 0 Step -1
    $Noch = _CalcTime($i / 60)
    GUICtrlSetData($Label3, "Noch: " & $Noch)
    Sleep(1000)
    Next
    If _StringEncrypt(0, $Cfg[5], "Safe", 4) = "Force" Then
    If $SArt = "Herunterfahren" Then
    Shutdown(5)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(6)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(4)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(36)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(68)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    Else
    If $SArt = "Herunterfahren" Then
    Shutdown(1)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(2)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(0)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(32)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(64)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    EndIf
    Else
    MsgBox(48, "Shutdown", "Die Config-Datei konnte nicht gefundn werden. Entweder benutzt du 1-Click Shutdown zum ersten mal oder du hast die Datei versehentlich gelöscht. Bitte benutze die Einstellungen, damit das Programm deinen Wünschen entsprechen kann.")
    _Einst()
    EndIf
    EndFunc ;==>_Start
    Func _CalcTime($ZeitInMin)
    $ZeitInSec = $ZeitInMin * 60
    $gStunden = $ZeitInSec / 3600
    $Stunden = _DelAfterDot($gStunden)
    $gMinuten = $ZeitInSec / 60
    $nMinuten = _DelAfterDot($gMinuten)
    $Minuten = $nMinuten - $Stunden * 60
    $tMinuten = $Minuten
    If $tMinuten < 10 Then
    $Minuten = "0" & $tMinuten
    EndIf
    $Sekunden = ($ZeitInSec - $Minuten * 60 - $Stunden * 3600);/6
    $tSekunden = $Sekunden
    If $tSekunden = 0 Then
    $Sekunden = "0" & $tSekunden
    Else
    $Sekunden = StringReplace($tSekunden, ".", "");
    EndIf
    Return $Stunden & ":" & $Minuten & ":" & $Sekunden
    EndFunc ;==>_CalcTime

    [/autoit]


    Vielen Dank im Vorraus :love:

    Einmal editiert, zuletzt von multitoeat (3. August 2010 um 01:59)

  • Die Time.au3 fehlt

    Guck dir einfach mal den Befehl "Round" an

    Time.au3 is drin ;)
    Aber werd ich mir mal ansehen...

    €: Es funktioniert, meiner Meinung nach, nicht mit Round, da der Counter eigentlich eine Zahl runterzählen müsste, allerdings Zahlen anhängt.
    Bsp: Nach der 47 wird anstatt der 46 die 4799999 angezeigt. Mit Round würde das nicht zur 46 sondern sogar zur 48!

  • [autoit]

    Int()

    [/autoit]

    Funktioniert nicht.
    Mein gutes altes Beispiel:
    4799999(47.99999) wird dadurch zu 47 soll aber zu 46 werden.

    Stimmt doch, ab 5 rundet man auf

    Und was soll mir das jetzt sagen? :D Ich will ja von beispielsweise 4799999 auf 46, da bringt es mir nichts aufzurunden...

  • Wieso soll das denn auf 46??


    Wie gesagt, die Zeit läuft manchmal falsch. Ich mache mal ein verständlicheres Beispiel:

    Code
    8:51:48
    8:51:47
    8:51:4799999
    8:51:45


    In etwa so läuft das manchmal ab.

  • Dann stimmt bei deiner Rechnung etwas nicht, in welche Angabe rechnest du denn?? Also kommt bei deiner Rechnung Secunden raus die du dann in Min und Stunden umrechnest? Ich habe jetzt gerad nicht so viel Zeit, sonst würde ich ri das Script mal gründlich Anschauen, wenn ich Zeit habe gucke ich mir es mal genau an

    EDIT:

    Time.au3 is drin

    Wo denn?

    EDIT2:
    Soweit ich das sehen kann rechnest du von Sekunden in Minuten und Stunden, guck dir dazu mal die Funktion an:

    Spoiler anzeigen
    [autoit]

    Func _SecToTime ($Sec)
    ;By Hendrik Norkowski (Jam00)
    ;Rückgabewert: $Array[Sekunden][Minuten][Stunden][Tage]
    Local $Rechner,$1,$Rest
    Local $Zeit[4] = [0,0,0,0]
    $Zeit[0] = $Sec
    For $1 = 0 To 2
    If $1 < 2 Then
    $Rechner = 60
    Else
    $Rechner = 24
    EndIf
    If $Zeit[$1] > $Rechner -1 Then
    $Rest = Mod ($Zeit[$1],$Rechner)
    $Zeit[$1 +1] = ($Zeit[$1] - $Rest) / $Rechner
    $Zeit[$1] = $Rest
    EndIf
    Next
    Return $Zeit
    EndFunc

    [/autoit]

    Dort gibts du einfach die Anzahl deiner Sekunden an, dann gibt er dir aus wie viele Minuten, Stunden und Tage in einem Array und die Rückgabe sollte auch stimmen ohne Kommastellen

    mfg. Jam00

    Einmal editiert, zuletzt von Jam00 (2. August 2010 um 17:56)

  • Die Time.au3 fehlt

    Time.au3 is drin ;)

    nein diese Datei ist kein Standard-Include und sie fehlt in deinem Post. Wenn ich #include <time.au3> auskommentiere (da ich diese Datei ja nicht habe) wird ERROR: _DelAfterDot(): undefined function angemeckert, sie wird also benötigt,

    im übrigen muss das

    [autoit]

    $Noch = _CalcTime(Round($i / 60,0))

    [/autoit]

    ebenso wie

    [autoit]

    $Noch = _CalcTime(Int($i / 60))

    [/autoit]

    funktionieren,

    mfg (Auto)Bert

  • Time.au3 is drin

    Es Funktionier auch, nur er wil das von 4799999 auf 46 und nicht auf 47 gerechnet wird, was aber total unlogisch ist, denn die 4799999 ist ganz klar ein rechenfehler seiner Funktion, deshalb habe ich ihm ja acuh mal meine Funktion _SecToTime gezeigt

    mfg. Jam00

  • Die time.au3 istganz eindeutig drin:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=clock.ico
    #AutoIt3Wrapper_Outfile=EXE\Shutdown.exe
    #AutoIt3Wrapper_Res_Description=Ein Programm mit dem das Zeitliche Herunterfahren ein Kinderspiel wird.
    #AutoIt3Wrapper_Res_Fileversion=0.1.6.1509
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <time.au3>;<--------------------Hier!
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIComboBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #include <Date.au3>
    Opt("TrayMenuMode", 1)

    [/autoit]

    Jam, ich werde deine Funktion mal ausprobieren, danke für die Hilfe.

  • Die time.au3 istganz eindeutig drin:

    In deinem Skript schon, aber mir liegt sie nicht vor :!:

    nein diese Datei ist kein Standard-Include und sie fehlt in deinem Post. Wenn ich #include <time.au3> auskommentiere (da ich diese Datei ja nicht habe) wird ERROR: _DelAfterDot(): undefined function angemeckert, sie wird also benötigt,

    das heisst du musst sie auch mit posten bzw. einen Link wo man sich diese Datei herunterladen kann, damit man helfen kann,

    mfg (Auto)Bert

  • ja da ist die time.au3 drinne, aber wir haben die time.au3 nicht, wir brauchen sie!! Wir meinten du solltest du datei Time.au3 als Dateianhang an deinen Post anhängen

    EDIT: AutoBert war schneller^^

    mfg. Jam00

  • Ah, jetzt versteh ich erst mal was ihr meint ;)
    Hier:

    Spoiler anzeigen
    [autoit]

    #cs --- Time.au3 UDF

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

    In dieser UDF findet man allerlei Funktionen die
    mit Zeit zu tun haben.

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

    #ce

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

    #cs --- Funktionen

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

    _GetYear
    _GetMonth
    _GetDay
    _GetHour
    _GetMin
    _GetSec
    _GetDate
    _GetTime
    _GetCalcDate
    _GetCalcTime

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

    #ce

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

    #include <Date.au3>
    #include <Timers.au3>

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

    Func _GetYear()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[1],"/")
    Return $ssNow[1]
    EndFunc

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

    Func _GetMonth()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[1],"/")
    Return $ssNow[2]
    EndFunc

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

    Func _GetDay()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[1],"/")
    Return $ssNow[3]
    EndFunc

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

    Func _GetHour()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[2],":")
    Return $ssNow[1]
    EndFunc

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

    Func _GetMin()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[2],":")
    Return $ssNow[2]
    EndFunc

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

    Func _GetSec()
    Local $Now
    Local $sNow
    Local $ssNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    $ssNow = StringSplit ($sNow[2],":")
    Return $ssNow[3]
    EndFunc

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

    Func _GetDate()
    Local $Date
    $Date = _GetDay() & "." & _GetMonth() & "." & _GetYear()
    Return $Date
    EndFunc

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

    Func _GetTime()
    Local $Time
    $Time = _GetHour() & ":" & _GetMin()
    Return $Time
    EndFunc

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

    Func _GetCalcDate()
    Local $Now
    Local $sNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    Return $sNow[1]
    EndFunc

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

    Func _GetCalcTime()
    Local $Now
    Local $sNow
    $Now = _NowCalc()
    $sNow = StringSplit ($Now," ")
    Return $sNow[2]
    EndFunc

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

    Func _TimerStart()
    Return _Timer_Init()
    EndFunc

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

    Func _TimerShow($Timer)
    Local $Time
    Local $dTime
    Local $Secs
    Local $rSecs
    $Time = _Timer_Diff($Timer)
    $dTime = _DelAfterDot($Time)
    $Secs = $dTime / 1000
    $rSecs = Round ($Secs,2)
    If _LenAfterDot($rSecs) = 1 Then
    $rSecs &= 0
    EndIf
    Return $rSecs
    EndFunc

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

    Func _DelAfterDot($Num)
    Local $Ret
    Local $Split
    $Split = StringSplit ($Num,".")
    If IsArray($Split) Then
    $Ret = $Split[1]
    Else
    $Ret = -1
    EndIf
    Return $Ret
    EndFunc

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

    Func _LenAfterDot($Num)
    Local $Ret
    Local $Split
    If StringInStr($Num,".") Then
    $Split = StringSplit ($Num,".")
    If IsArray($Split) Then
    $Ret = StringLen($Split[2])
    Else
    $Ret = -1
    EndIf
    Else
    $Ret = 0
    EndIf
    Return $Ret
    EndFunc

    [/autoit]


    Sorry, war etwas Verwirrt :)
    Achja, mit der _SecToTime Funktion bekomm ich es irgendwiue gar nicht auf die Reihe :O

  • Hallo MultiToEat,

    wenn du so abänderst läuft dein Original-Skript

    Spoiler anzeigen
    [autoit]

    Func _CalcTime($ZeitInMin) ;< ======= diese Func war fehlerhaft
    $ZeitInSec = Round($ZeitInMin * 60,0)
    $Stunden = Int($ZeitInSec / 3600)
    $Minuten = Int($ZeitInSec / 60) - $Stunden * 60
    If $Minuten < 10 Then $Minuten = "0" & $Minuten
    $Sekunden = ($ZeitInSec - $Minuten * 60 - $Stunden * 3600);/6
    If $Sekunden < 10 Then $Sekunden = "0" & $Sekunden
    Return $Stunden & ":" & $Minuten & ":" & $Sekunden
    EndFunc ;==>_CalcTime

    [/autoit]

    Edit: nach dem ich jetzt auch die mir fehlende func _DelAfterDot hatte, habe ich einfach folgendes Testskript gebastelt und angepasst:

    Spoiler anzeigen
    [autoit]

    _Start()

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

    Func _Start()
    $SECS = 80000
    For $i = $SECS To 0 Step -1
    ;$Noch = _CalcTime(Int($i / 60))
    $Noch = _CalcTime($i / 60)
    Consolewrite($Noch & @CRLF)
    ;Sleep(1000) ;sonst dauert das Testen zu lange
    Next
    EndFunc ;==>_Start

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

    Func _CalcTime($ZeitInMin) ;< ======= diese Func war fehlerhaft
    $ZeitInSec = Round($ZeitInMin * 60,0)
    $Stunden = Int($ZeitInSec / 3600)
    $Minuten = Int($ZeitInSec / 60) - $Stunden * 60
    If $Minuten < 10 Then $Minuten = "0" & $Minuten
    $Sekunden = ($ZeitInSec - $Minuten * 60 - $Stunden * 3600);/6
    If $Sekunden < 10 Then $Sekunden = "0" & $Sekunden
    Return $Stunden & ":" & $Minuten & ":" & $Sekunden
    EndFunc ;==>_CalcTime

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

    #cs Ergebnis ohne Round und Int
    0:08:32
    0:08:310000000000001
    0:08:30
    #ce

    [/autoit]

    dass es jetzt funktioniert beweist die Ausgabe in der Scit-Console

    Edit2: da durch Int jetzt nur noch ganze Stunden und Minuten herauskommen habe ich die func _CalcTime noch einmal geändert, den _DelAfterDot ist dadurch überflüssig, also auch das includen von time.au3

    mfg (Auto)Bert

    3 Mal editiert, zuletzt von AutoBert (3. August 2010 um 00:28) aus folgendem Grund: nochmals optimiert (gekürzt)

  • Oder so mit meinem, ich glaub das ist ein bischen eleganter und du brauchst die time.au3 nicht mehr

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=clock.ico
    #AutoIt3Wrapper_Outfile=EXE\Shutdown.exe
    #AutoIt3Wrapper_Res_Description=Ein Programm mit dem das Zeitliche Herunterfahren ein Kinderspiel wird.
    #AutoIt3Wrapper_Res_Fileversion=0.1.6.1509
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIComboBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #include <Date.au3>
    Opt("TrayMenuMode", 1)

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

    Global $Cfg
    Global $Shutdown
    Global $Shtd
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Shutdown", 217, 199, -1, -1)
    $Button1 = GUICtrlCreateButton("Letzte Einstellungen starten", 16, 72, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Startet einen Shutdown mit den zuletzt gespeicherten Daten.")
    $Button2 = GUICtrlCreateButton("Einstellungen", 16, 112, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Einstellungen um einen Benutzerdefinierten Shutdown zu generieren.")
    $Button3 = GUICtrlCreateButton("Laufenden Shutdown abbrechen", 16, 152, 185, 33, $WS_GROUP)
    GUICtrlSetTip(-1, "Ein laufender Shutdown wird abgebrochen. Benötigt möglicherweise ein Passwort.")
    $Label1 = GUICtrlCreateLabel("Bitte die auszuführende", 8, 8, 201, 27)
    GUICtrlSetFont(-1, 16, 400, 0, "Times New Roman")
    $Label2 = GUICtrlCreateLabel("Aktion wählen.", 40, 40, 130, 27)
    GUICtrlSetFont(-1, 16, 400, 0, "Times New Roman")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button2
    GUIDelete($Form1)
    _Einst()
    Case $Button1
    GUIDelete($Form1)
    _Start()
    Case $Button3
    _Abbrechen()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func _Abbrechen()
    If WinExists("1 Click Shutdown") Then
    ProcessClose("Shutdown.exe")
    Else
    MsgBox(48, "1-Click Shutdown", "Es läuft kein Shutdown.")
    EndIf
    EndFunc ;==>_Abbrechen
    Func _Einst()
    If FileExists("shutdown.cfg") Then
    _FileReadToArray("shutdown.cfg", $Cfg)
    $Shtd = 1
    EndIf
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Main.kxf
    $Form1 = GUICreate("1-Click Shutdown - Einstellungen", 330, 197, -1, -1)
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Group1 = GUICtrlCreateGroup("Shutdownart", 8, 0, 145, 65)
    GUICtrlSetTip(-1, "")
    $Combo1 = GUICtrlCreateCombo("Herunterfahren", 16, 16, 129, 25)
    GUICtrlSetTip(-1, "Art des Shutdowns")
    GUICtrlSetData(-1, "Neustarten|Abmelden|Standby|Ruhezustand")
    $Checkbox1 = GUICtrlCreateCheckbox("Force Shut", 16, 40, 97, 17)
    GUICtrlSetTip(-1, "Erzwingt das schliessen aller Programme")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Zeit", 8, 64, 145, 73)
    $Combo2 = GUICtrlCreateCombo("Eigene Zeit (Min)", 16, 80, 129, 25)
    GUICtrlSetTip(-1, "Zeit bis zum Shutdown")
    GUICtrlSetData(-1, "15 Minuten|30 Minuten|45 Minuten|1 Stunde|2 Stunden|3 Stunden|5 Stunden")
    $Edit1 = GUICtrlCreateEdit("", 16, 112, 129, 17, BitOR($ES_RIGHT, $ES_WANTRETURN, $ES_NUMBER))
    GUICtrlSetTip(-1, "Zeit in Minuten")
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Meldung", 160, 0, 161, 81)
    $Edit2 = GUICtrlCreateEdit("", 168, 16, 145, 57, $ES_WANTRETURN)
    GUICtrlSetTip(-1, "Meldung im Shutdownfenster")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Einstellungen speichern", 8, 144, 129, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Speichert die aktuellen Einstellungen")
    $Button2 = GUICtrlCreateButton("Shutdown starten", 144, 144, 129, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Startet den Shutdown mit den aktuellen Einstellungen")
    $Button3 = GUICtrlCreateButton("Exit", 280, 144, 41, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Schliesst das Programm")
    $Button4 = GUICtrlCreateButton("Shutdown abbrechen", 8, 169, 313, 25, $WS_GROUP)
    GUICtrlSetTip(-1, "Bricht einen laufenden Shutdown ab.")
    $Group4 = GUICtrlCreateGroup("Passwort zum Abbrechen", 160, 96, 161, 41)
    $Edit3 = GUICtrlCreateEdit("", 168, 112, 145, 17, $ES_WANTRETURN)
    GUICtrlSetTip(-1, "Passwort. Noch nicht Implementiert")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    If $Shtd = 1 Then
    $Inx = _GUICtrlComboBox_FindString($Combo1, _StringEncrypt(0, $Cfg[1], "Safe", 4))
    _GUICtrlComboBox_SetCurSel($Combo1, $Inx)
    If Not StringInStr(_StringEncrypt(0, $Cfg[2], "Safe", 4), "Own") Then
    $Inx = _GUICtrlComboBox_FindString($Combo2, _StringEncrypt(0, $Cfg[2], "Safe", 4))
    _GUICtrlComboBox_SetCurSel($Combo2, $Inx)
    Else
    $sCfg2 = StringSplit(_StringEncrypt(0, $Cfg[2], "Safe", 4), "|")
    GUICtrlSetData($Edit1, $sCfg2[2])
    EndIf
    If $Cfg[0] > 2 Then
    GUICtrlSetData($Edit3, _StringEncrypt(0, $Cfg[3], "Safe", 4))
    EndIf
    If $Cfg[0] > 3 Then
    GUICtrlSetData($Edit2, _StringEncrypt(0, $Cfg[4], "Safe", 4))
    EndIf
    If _StringEncrypt(0, $Cfg[5], "Safe", 4) = "Force" Then
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    EndIf
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $Zeit = GUICtrlRead($Combo2)
    If $Zeit <> "Eigene Zeit (Min)" Then
    If GUICtrlGetState($Edit1) = 80 Then
    GUICtrlSetState($Edit1, $GUI_DISABLE)
    EndIf
    Else
    If GUICtrlGetState($Edit1) = 144 Then
    GUICtrlSetState($Edit1, $GUI_ENABLE)
    EndIf
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $SArt = ""
    $Time = ""
    $Msg = ""
    $PW = ""
    $Force = ""
    $SArt = GUICtrlRead($Combo1)
    $Time = GUICtrlRead($Combo2)
    If $Time = "Eigene Zeit (Min)" Then
    $Time = "Own|" & GUICtrlRead($Edit1)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit2)) Then
    $Msg = GUICtrlRead($Edit2)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit3)) Then
    $PW = GUICtrlRead($Edit3)
    EndIf
    If GUICtrlRead($Checkbox1) = 1 Then
    $Force = "Force"
    EndIf
    If FileExists("shutdown.cfg") Then
    FileDelete("shutdown.cfg")
    EndIf
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $SArt, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Time, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $PW, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Msg, "Safe", 4))
    FileWriteLine("shutdown.cfg", _StringEncrypt(1, $Force, "Safe", 4))
    Case $Button2
    ToolTip("")
    $SArt = ""
    $Time = ""
    $Msg = ""
    $PW = ""
    $SArt = GUICtrlRead($Combo1)
    $Time = GUICtrlRead($Combo2)
    If $Time = "Eigene Zeit (Min)" Then
    $Time = GUICtrlRead($Edit1)
    ElseIf $Time = "15 Minuten" Then
    $Time = 15
    ElseIf $Time = "30 Minuten" Then
    $Time = 30
    ElseIf $Time = "45 Minuten" Then
    $Time = 45
    ElseIf $Time = "1 Stunde" Then
    $Time = 60
    ElseIf $Time = "2 Stunden" Then
    $Time = 120
    ElseIf $Time = "3 Stunden" Then
    $Time = 180
    ElseIf $Time = "5 Stunden" Then
    $Time = 300
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit2)) Then
    $Msg = GUICtrlRead($Edit2)
    EndIf
    If Not StringIsSpace(GUICtrlRead($Edit3)) Then
    $PW = GUICtrlRead($Edit3)
    EndIf
    GUIDelete($Form1)
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Shtd.kxf
    $Form2 = GUICreate("1 Click Shutdown", 170, 158, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Label1 = GUICtrlCreateLabel("1-Click Shutdown", 8, 8, 87, 17)
    $Label2 = GUICtrlCreateLabel($SArt, 16, 32, 91, 17)
    $Label3 = GUICtrlCreateLabel("Noch: ZEIT", 104, 32, 60, 34)
    $Label5 = GUICtrlCreateLabel("Startet um: ZEITZEITZEITZEIT", 29, 145)
    WinSetOnTop("1 Click Shutdown", "", 1)
    If $Msg <> "" Then
    $Group1 = GUICtrlCreateGroup("Meldung", 8, 56, 153, 89)
    $Label4 = GUICtrlCreateLabel($Msg, 16, 72, 137, 64)
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Start = _SecToTime($Time, 1)
    GUICtrlSetData($Label5, "Startet um: " & $Start)
    $Secs = $Time * 60
    For $i = $Secs To 0 Step -1
    $Noch = _SecToTime($i, 1)
    GUICtrlSetData($Label3, "Noch: " & @CRLF & $Noch)
    Sleep(1000)
    Next
    If $Cfg[5] = "Force" Then
    If $SArt = "Herunterfahren" Then
    Shutdown(5)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(6)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(4)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(36)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(68)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    Else
    If $SArt = "Herunterfahren" Then
    Shutdown(1)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(2)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(0)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(32)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(64)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    EndIf
    Case $Button3
    Exit
    Case $Button4
    If WinExists("1 Click Shutdown") Then
    ProcessClose("Shutdown.exe")
    Else
    MsgBox(48, "1-Click Shutdown", "Es läuft kein Shutdown.")
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>_Einst
    Func _Start()
    If FileExists("shutdown.cfg") Then
    _FileReadToArray("shutdown.cfg", $Cfg)
    $SArt = _StringEncrypt(0, $Cfg[1], "Safe", 4)
    #Region ### START Koda GUI section ### Form=E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Programme\Shutdown\Shtd.kxf
    $Form2 = GUICreate("1 Click Shutdown", 170, 158, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
    GUISetIcon("E:\Dokumente und Einstellungen\Sven.CHANGEME\Desktop\AutoIt\Icons\Icon_28.ico")
    $Label1 = GUICtrlCreateLabel("1-Click Shutdown", 8, 8, 87, 17)
    $Label2 = GUICtrlCreateLabel($SArt, 16, 32, 91, 17)
    $Label3 = GUICtrlCreateLabel("Noch: ZEIT", 104, 32, 60, 34)
    WinSetOnTop("1 Click Shutdown", "", 1)
    If _StringEncrypt(0, $Cfg[4], "Safe", 4) <> "" Then
    $Group1 = GUICtrlCreateGroup("Meldung", 8, 56, 153, 89)
    $Label4 = GUICtrlCreateLabel(_StringEncrypt(0, $Cfg[4], "Safe", 4), 16, 72, 137, 64)
    EndIf
    $Label5 = GUICtrlCreateLabel("Startet um: ZEITZEITZEITZEIT", 29, 145)

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

    If StringInStr(_StringEncrypt(0, $Cfg[2], "Safe", 4), "Own") Then
    $sCfg2 = StringSplit(_StringEncrypt(0, $Cfg[2], "Safe", 4), "|")
    $Time = $sCfg2[2]
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "15 Minuten" Then
    $Time = 15
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "30 Minuten" Then
    $Time = 30
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "45 Minuten" Then
    $Time = 45
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "1 Stunde" Then
    $Time = 60
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "2 Stunden" Then
    $Time = 120
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "3 Stunden" Then
    $Time = 180
    ElseIf _StringEncrypt(0, $Cfg[2], "Safe", 4) = "5 Stunden" Then
    $Time = 300
    EndIf
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Start1 = _SecToTime($Time, 1)
    $Start2 = StringSplit($Start1, ":")
    If $Start2[2] + @MIN < 60 Then
    $Minut = $Start2[2] + @MIN
    $Stund = $Start2[1] + @HOUR
    Else
    $Minut = $Start2[2] + @MIN - 60
    $Stund = $Start2[1] + @HOUR + 1
    EndIf
    $Sekund = $Start2[3] + @SEC
    $Start = $Stund & ":" & $Minut & ":" & $Sekund
    GUICtrlSetData($Label5, "Startet um: " & $Start)
    $Secs = $Time * 60
    For $i = $Secs To 0 Step -1
    $Noch = _SecToTime($i, 1)
    GUICtrlSetData($Label3, "Noch: " & $Noch)
    Sleep(1000)
    Next
    If _StringEncrypt(0, $Cfg[5], "Safe", 4) = "Force" Then
    If $SArt = "Herunterfahren" Then
    Shutdown(5)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(6)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(4)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(36)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(68)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    Else
    If $SArt = "Herunterfahren" Then
    Shutdown(1)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Neustarten" Then
    Shutdown(2)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Abmelden" Then
    Shutdown(0)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Standby" Then
    Shutdown(32)
    FileWrite("Sucess.txt", $SArt)
    ElseIf $SArt = "Ruhezustand" Then
    Shutdown(64)
    FileWrite("Sucess.txt", $SArt)
    EndIf
    EndIf
    Else
    MsgBox(48, "Shutdown", "Die Config-Datei konnte nicht gefundn werden. Entweder benutzt du 1-Click Shutdown zum ersten mal oder du hast die Datei versehentlich gelöscht. Bitte benutze die Einstellungen, damit das Programm deinen Wünschen entsprechen kann.")
    _Einst()
    EndIf
    EndFunc ;==>_Start
    Func _SecToTime($Sec, $Flag = 0)
    ;By Hendrik Norkowski (Jam00)
    ;Rückgabewert: $Array[Sekunden][Minuten][Stunden][Tage]
    Local $Rechner, $1, $Rest
    Local $Zeit[4] = [0, 0, 0, 0]
    $Zeit[0] = $Sec
    For $1 = 0 To 2
    If $1 < 2 Then
    $Rechner = 60
    Else
    $Rechner = 24
    EndIf
    If $Zeit[$1] > $Rechner - 1 Then
    $Rest = Mod($Zeit[$1], $Rechner)
    $Zeit[$1 + 1] = ($Zeit[$1] - $Rest) / $Rechner
    $Zeit[$1] = $Rest
    EndIf
    Next
    If $Flag = 1 Then
    Local $sZeit, $State = 0
    For $1 = 3 To 0 Step -1
    If $Zeit[$1] > 0 Then
    $State = 1
    $sZeit &= $Zeit[$1] & ":"
    ElseIf $State = 1 Then
    $sZeit &= $Zeit[$1] & ":"
    EndIf
    Next
    Return StringTrimRight($sZeit, 1)
    EndIf
    Return $Zeit
    EndFunc ;==>_SecToTime

    [/autoit]

    mfg. Jam00

  • Ich glaube das ist einfach eine ungenauigkeit von AutoIT wenns um komma Zahlen geht.

    Zur besseren Verständnis führt mal dieses Script aus:

    Spoiler anzeigen
    [autoit]

    For $i = 1.111 To 4 Step 0.001
    ConsoleWrite(@CRLF&$i)
    Next

    [/autoit]

    Meine Console Spuckt folgendes aus:

    Spoiler anzeigen
    [autoit]


    1.475
    1.476
    1.477
    1.47799999999999
    1.47899999999999

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

    ;etwas tiefer dann

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

    3.73799999999975
    3.73899999999975
    3.73999999999975
    3.74099999999975

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

    ganz unten

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

    3.99799999999972
    3.99899999999972
    3.99999999999972

    [/autoit]


    Also werden Zahlen errechnet die bei + 0.001 eigentlich niemals entstehen können.