Shutdown

  • Guten Abend allerseits,

    ich weiss, dass es sehr viele und schöne Shutdown tools schon gibts, jedoch wollte ich mal selber eins gemacht haben. Bis her funktioniert es schon sehr gut, jedoch habe ich noch ein paar Fragen.

    Erst einmal der Code:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #NoTrayIcon

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

    Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown.

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

    Global $H = "00", $M = "00"

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

    $Show = TrayCreateItem("Show Time")
    TrayItemSetState(-1, $TRAY_DISABLE)
    TrayCreateItem("")
    $time = TrayCreateItem("Zeit ändern")
    TrayItemSetState(-1, $TRAY_DISABLE)
    TrayCreateItem("")
    $exititem = TrayCreateItem("Exit")

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

    $hGui = GUICreate("Zeit einstellen", 135, 50)
    $Hour = GUICtrlCreateCombo("", 10, 20, 35, 10)
    GUICtrlSetData(-1, "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23", "12")
    $Minuten = GUICtrlCreateCombo("", 55, 20, 35, 10)
    GUICtrlSetData(-1, "00|15|30|45", "00")
    GUICtrlCreateLabel(":", 48, 22, 3)
    GUICtrlCreateLabel("Uhrzeit:", 10, 5, 40, 15)
    $start = GUICtrlCreateButton("Start", 100, 20, 30, 20)
    GUISetState()

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

    $lol = GUICreate("Timer", 150, 50)
    $a = GUICtrlCreateLabel("", 10, 20, 140, 20)
    GUISetState($lol, @SW_HIDE)

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

    TraySetState()
    TraySetClick(16)

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

    AdlibEnable("_time", 500)

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

    While 1
    $nMsg = GUIGetMsg()
    $msg = TrayGetMsg()
    Switch $msg
    Case $exititem
    Exit
    EndSwitch
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Switch MsgBox(4,"Sind Sie sicher ?","Sind Sie sicher, dass Sie das Programm beenden wollen?")
    Case 6
    Exit
    EndSwitch
    Case $start
    $H = GUICtrlRead($Hour)
    $M = GUICtrlRead($Minuten)
    TrayItemSetState($Show, $TRAY_ENABLE)
    TrayItemSetState($time, $TRAY_ENABLE)
    WinSetState($hGui, "", @SW_HIDE)
    WinSetState($lol, "", @SW_SHOW)
    While 1
    $msg = TrayGetMsg()
    $nMsg = GUIGetMsg()
    Switch $msg
    Case $Show
    WinSetState($lol, "", @SW_SHOW)
    Case $exititem
    Exit
    Case $time
    TrayItemSetState($Show, $TRAY_DISABLE)
    TrayItemSetState($time, $TRAY_DISABLE)
    WinSetState($lol, "", @SW_HIDE)
    WinSetState($hGui, "", @SW_SHOW)
    ExitLoop
    EndSwitch
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    WinSetState($lol, "", @SW_HIDE)
    EndSwitch
    If @HOUR = $H Then
    If @MIN = $M Then
    Shutdown(1)
    Exit
    EndIf
    EndIf
    WEnd
    EndSwitch
    WEnd

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

    Func _time()
    $t = 60 - @MIN - $M
    If $t = 60 Then $t = 00
    $r = $H - @HOUR
    If $r < 0 Then
    Switch $r
    Case - 1
    $r = 23
    Case - 2
    $r = 22
    Case - 3
    $r = 21
    Case - 4
    $r = 20
    Case - 5
    $r = 19
    Case - 6
    $r = 18
    Case - 7
    $r = 17
    Case - 8
    $r = 16
    Case - 9
    $r = 15
    Case - 10
    $r = 14
    Case - 11
    $r = 13
    Case - 12
    $r = 12
    Case - 13
    $r = 11
    Case - 14
    $r = 10
    Case - 15
    $r = 9
    Case - 16
    $r = 8
    Case - 17
    $r = 7
    Case - 18
    $r = 6
    Case - 19
    $r = 5
    Case - 20
    $r = 4
    Case - 21
    $r = 3
    Case - 22
    $r = 2
    Case - 23
    $r = 1
    Case - 24
    $r = 0
    EndSwitch
    EndIf
    If $t >= 1 Then $r -= 1
    GUICtrlSetData($a, $r & " : " & $t)
    EndFunc ;==>_time

    [/autoit]

    Frage 1:
    Wenn ihr das jetzt startet, seht ihr zuerst die Gui zur Zeiteinstellung, wann der Computer Heruntergefahren werden soll. An sich schön und gut, jedoch sind die Combo boxen nicht wirklich mein genauer wunsch. Undzwar hätte ich gerne sozusagen nen Input, wo z.b. die Zahl 13 drinsteht. Daneben Zwei Pfeile, einer Hoch, einer Runter, mit denen man die Zahl um 1 erhöt oder verringert.

    Frage 2:
    In der Funktion _time() ist ein sehr langer switch, der nicht schön aussieht. Gibt es da vielleicht eine kürzere / schönere variante um dieses zu lösen ?

    Danke erstmal an alle, ich hoffe Ihr könnt mir weiterhelfen.

    MfG SiLenCa

    Edit:
    Sooo, habe meine _time() Funktion mal ein wenig kürzer hinbekommen. Bis jetzt habe ich keinen Fehler in den berechnungen gefunden. Aber falls jemand einen findet, bitte sagen ;)

    Spoiler anzeigen
    [autoit]

    Func _time()
    $t = $M - @MIN
    $r = $H - @HOUR
    If $t < 0 Then $t = 60 - @MIN
    If $r < 0 Then $r = 24 - @HOUR
    If @MIN > $t Then $t = 60 - @MIN
    If $t > 0 Then
    If $r = 0 Then
    $r = 23
    Else
    $r -= 1
    EndIf
    EndIf
    GUICtrlSetData($a, $r & " : " & $t)
    EndFunc ;==>_time

    [/autoit]

    Einmal editiert, zuletzt von SiLenCa (23. Mai 2009 um 02:39)

  • Hier mal deine UpDowns

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 172, 40, 193, 125)
    $Input1 = GUICtrlCreateInput("", 8, 8, 57, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
    GUICtrlCreateUpdown (-1,0x20)
    GUICtrlSetLimit (-1,24,0)
    $Input2 = GUICtrlCreateInput("", 86, 8, 57, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
    GUICtrlCreateUpdown (-1,0x20)
    GUICtrlSetLimit (-1,60,0)
    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]

    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

  • Nice, thanks.
    Hätte nie gedacht, das jemand bei meiner Beschreibung auf das richtige kommt :)

    So, jetzt steht immernoch das problem mit der berechnung der Zeitdifferenz (func _time()). Im Edit oben dachte ich, es klappt soweit, jedoch habe ich jetzt noch ein wenig getestet, und habe meistens ein Problem, sobald $M = 30 oder 45 ist.

    Edit: Habe die Funktion _time() wieder ein wenig verändert. Leider funktioniert sie immernoch nicht einwandfrei.

    Spoiler anzeigen
    [autoit]

    Func _time()
    $dHour = $H - @HOUR
    $dMin = $M - @MIN
    If $dHour < 0 Then $dHour = 24 - @HOUR + $H
    If $dMin < 0 Then $dMin = 60 - @MIN + $M
    If $dMin > 0 Then
    If $M > @HOUR And $M < @MIN Then
    If $dHour = 0 Then
    $dHour = 23
    Else
    $dHour -= 1
    EndIf
    EndIf
    If $dMin + @MIN >= 60 Then
    $dHour -= 1
    EndIf
    EndIf
    Switch $dHour
    Case 0 To 9
    $dHour = "0" & $dHour
    EndSwitch
    Switch $dMin
    Case 0 To 9
    $dMin = "0" & $dMin
    EndSwitch
    GUICtrlSetData($Dif,$dHour & " : " & $dMin)
    EndFunc ;==>_time

    [/autoit]

    Weiss denn keiner was mir noch Fehlt ?

    Einmal editiert, zuletzt von SiLenCa (23. Mai 2009 um 16:11)