- 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
#include <Date.au3>
#include <DateTimeConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
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
While Sleep(1000) ; Endlosschleife mit Sleep, um die CPU zu entlasten
WEnd
Func _End()
Exit ; Programm beenden
EndFunc
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
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
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