• Offizieller Beitrag

    Hier sind so viele Skripte zum herunterfahren/neustarten des Rechners, da muss ich doch auch mal eine Version rausbringen. ;)

    Ich bin da auch ganz bescheiden und begnüge mich mit 64 Zeilen:

    Jetzt eine erweiterte Version (82 Zeilen und vollständig kommentiert):

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    Opt('GUIOnEventMode', 1) ; auf den Event-Mode umschalten

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

    Global $iShutdown, $sStartTime, $sEndTime
    GUICreate('Shutdown-Tool', 300, 160) ; das Fenster erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; beim schliessen des Fensters die Funktion _End() aufrufen
    GUISetIcon('shell32.dll', 28) ; das Shutdown-Icon aus der shell32.dll als Programm-Icon benutzen
    GUISetBkColor(0xCCCCCC) ; Hintergrundfarbe des Fensters setzen
    $hMode1 = GUICtrlCreateRadio('Herunterfahren', 10, 10, 110, 20) ; Radiobutton erstellen
    GUICtrlSetOnEvent(-1, '_CheckMode') ; beim anklicken des Radiobuttons die Funktion _Checkmode() ausführen
    GUICtrlSetState(-1, $GUI_CHECKED) ; der "Herunterfahren"-Button soll standardmässig ausgewählt sein
    $hMode2 = GUICtrlCreateRadio('Ruhezustand', 10, 30, 110, 20) ; s.o.
    GUICtrlSetOnEvent(-1, '_CheckMode') ; s.o.
    $hMode3 = GUICtrlCreateRadio('Standby', 10, 50, 110, 20) ; s.o.
    GUICtrlSetOnEvent(-1, '_CheckMode') ; s.o.
    $hMode4 = GUICtrlCreateRadio('Neu starten', 10, 70, 110, 20) ; s.o.
    GUICtrlSetOnEvent(-1, '_CheckMode') ; s.o.
    $hForce = GUICtrlCreateCheckbox('Modus erzwingen?', 10, 100, 110, 20) ; Checkbox "Modus erzwingen?" erstellen
    $hActTime = GUICtrlCreateLabel('', 180, 10, 100, 20) ; das Label zum anzeigen der akt. Uhrzeit erstellen
    GUICtrlSetFont(-1, 16) ; die Schriftgrösse des Labels auf 16 setzen
    $hSetTime = GUICtrlCreateDate('', 178, 50, 110, 25, $DTS_TIMEFORMAT) ; mit diesem Control kann man eine Uhrzeit (HH:MM:SS) einstellen
    GUICtrlSetFont(-1, 16) ; die Schriftgrösse des Uhrzeit-Controls auf 16 setzen
    $hStart = GUICtrlCreateButton('Start', 178, 95, 110, 25) ; den Startbutton erstellen
    GUICtrlSetOnEvent(-1, '_Start') ; beim anklicken des Startbuttons die Funktion _Start() aufrufen
    $hTimeProgr = GUICtrlCreateProgress(0, 140, 300, 20, $PBS_SMOOTH) ; Progressbalken erstellen
    GUISetState() ; Fenster anzeigen
    AdlibRegister('_RefreshTime', 500) ; die Funktion _RefreshTime() wird alle 500ms aufgerufen

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

    While Sleep(1000) ; Endlosschleife mit Sleep, um die CPU zu entlasten
    WEnd

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

    Func _End()
    Exit ; Programm beenden
    EndFunc

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

    Func _RefreshTime()
    Local $sTime, $iPercent, $sTimeDiff
    $sTime = StringFormat('%02i:%02i:%02i', @HOUR, @MIN, @SEC) ; Uhrzeit ins richtige Format bringen
    GUICtrlSetData($hActTime, $sTime) ; und in das Label schreiben
    If GUICtrlRead($hStart) = 'Start' Then Return ; wenn im Startbutton noch "Start" steht, dann Funktion hier verlassen
    $sTimeDiff = _DateDiff('s', _NowCalcDate() & ' ' & $sTime, $sEndTime) ; die Differenz (in Sek.) zwischen akt. Zeit und eingestellter Zeit ausrechnen
    If $sTimeDiff <= 10 Then ; wenn die Differenz kleiner/gleich 10 Sekunden ist, dann...
    ToolTip('Noch ' & $sTimeDiff & ' sekunden', @DesktopWidth / 2 - 50, @DesktopHeight / 2 - 50, 'Shutdown-Tool', 2, 5) ; die Differenz in einem Tooltip anzeigen
    EndIf
    $iPercent = 100 / _DateDiff('s', $sStartTime, $sEndTime) * $sTimeDiff ; Prozentwert ausrechnen
    GUICtrlSetData($hTimeProgr, $iPercent) ; und den Progressbalken entsprechend füllen
    If $sEndTime = $sTime Then Exit Shutdown($iShutdown) ; wenn die eingestellte Zeit erreicht ist, dann den Shutdown-Befehl ausführen und das Programm beenden
    EndFunc

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

    Func _CheckMode()
    Switch @GUI_CtrlId ; hiermit wird geprüft, von welchem Radiobutton diese Funktion aufgerufen wurde
    Case $hMode1, $hMode4 ; bei "Herunterfahren" und "Neu starten"
    GUICtrlSetState($hForce, $GUI_ENABLE) ; die Checkbox "Modus erzwingen?" aktivieren
    Case Else ; ansonsten ("Ruhezustand" und "Standby")
    GUICtrlSetState($hForce, $GUI_DISABLE) ; die Checkbox "Modus erzwingen?" deaktivieren
    EndSwitch
    EndFunc

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

    Func _Start()
    Switch GUICtrlRead($hStart) ; entsprechend dem Text auf dem Startbutton auswählen was passieren soll
    Case 'Start' ; wenn auf dem Startbutton noch "Start" stand, soll jetzt der Countdown gestartet werden
    $sStartTime = _NowCalc() ; das aktuelle Datum und Uhrzeit holen
    $sEndTime = _NowCalcDate() & ' ' & GUICtrlRead($hSetTime) ; die eingestellte Uhrzeit auslesen
    If _DateDiff('s', $sStartTime, $sEndTime) < 0 Then $sEndTime = _DateAdd('D', 1, $sEndTime) ; wenn die eingestellte Uhrzeit vor der aktuellen liegt, dann einen Tag addieren
    GUICtrlSetData($hStart, 'Abbrechen') ; den Text auf dem Startbutton auf "Abbrechen" ändern
    GUICtrlSetState($hSetTime, $GUI_DISABLE) ; das Zeiteingabe-Control deaktivieren
    If BitAND(GUICtrlRead($hMode1), $GUI_CHECKED) Then $iShutdown = 9 ; wenn der Radiobutton "Herunterfahren" ausgewählt wurde, entsprechenden Shutdown-Code benutzen
    If BitAND(GUICtrlRead($hMode2), $GUI_CHECKED) Then $iShutdown = 64 ; "Ruhezustand"
    If BitAND(GUICtrlRead($hMode3), $GUI_CHECKED) Then $iShutdown = 32 ; "Standby"
    If BitAND(GUICtrlRead($hMode4), $GUI_CHECKED) Then $iShutdown = 2 ; "Neu starten"
    If $iShutdown <= 9 And BitAND(GUICtrlRead($hForce), $GUI_CHECKED) Then $iShutdown += 20 ; wenn "Modus erzwingen" ausgewählt war, dann 20 dazuaddieren
    Case 'Abbrechen' ; auf dem Startbutton stand "Abbrechen", also soll der Countdown gestoppt werden
    ToolTip('') ; den Tooltip ausblenden
    GUICtrlSetData($hStart, 'Start') ; den Text auf dem Startbutton wieder zu "Start" ändern
    GUICtrlSetState($hSetTime, $GUI_ENABLE) ; das Zeiteingabe-Control aktivieren
    GUICtrlSetData($hTimeProgr, 0) ; den Progressbalken auf null setzen
    EndSwitch
    EndFunc

    [/autoit]
  • Und wieder hat deine Sammlung ein Script mehr ;)
    Wäre vielleicht cool wenn in den letzen 10 Sekunden vor dem Runterfahren/Abmelden etc. noch ein Countdown käme.
    Und vielleicht könntest du das Design überarbeiten sagt mir noch nicht zu ...

  • Nein ich brauche das nicht,weil mir reicht das im Startmenü völlig.
    Aber es gibt bestimmt jemanden,der das dann vielleicht als Beispiel nimmt und je besser das dann ist ,desto mehr lernt man ;)

  • Ok, habe ja früher auch schon einige Skripte für Anfänger (vollständig kommentiert) vorgestellt. Hier (Post #1) also eine erweiterte und kommentierte Version vom Shutdown-Tool. :)

    Klein, aber fein und super auskommentiert :)
    Find ich wirklich klasse für einen Anfänger wie mich