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.
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
#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)
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 ###
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 ###
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)
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
Vielen Dank im Vorraus