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
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#NoTrayIcon
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")
$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()
$lol = GUICreate("Timer", 150, 50)
$a = GUICtrlCreateLabel("", 10, 20, 140, 20)
GUISetState($lol, @SW_HIDE)
TraySetState()
TraySetClick(16)
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
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
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
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