Hi,
ich muß ein Script schreiben, bei dem PC maximal 30 Minuten am Tag an sein darf.
Dies habe ich soweit auch fertig und es funktioniert auch.
Wenn der PC 20 Min an ist und dann neu gestartet wird, darf er noch 10 Min an sein - funktioniert soweit auch.
Nun habe ich allerdings ein Problem.
Wenn der PC 30 Min an ist, dann die Uhrzeit verstellt wird und neugestartet wird, darf der PC wieder 30 Min an sein.
Wie könnte ich dies verhindern???
PS: Es ist für ein 5 Jahre altes Kind
Spoiler anzeigen
#include<Date.au3>
#include<File.au3>
#include<Misc.au3>
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Icon.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt("GUICloseOnESC", 0) ;beim drücken von ESC NICHT beenden
#NoTrayIcon ;kein TrayIcon
;genauer Pfad zu den einzubindenen Icons, Sounds und Grafiken
FileInstall("U:\_AutoIt\aktuelle Finals\Kindersicherung\start.mp3", @TempDir & "\" & "start.mp3", 1)
FileInstall("U:\_AutoIt\aktuelle Finals\Kindersicherung\wecker.mp3", @TempDir & "\" & "wecker.mp3", 1)
; Tool-Infos
$tool_version = "01 Test 10"
$tool_titel = "Kindersicherung"
;ini-Datei mit den Einstellungen
$ini_einstellungen = @ScriptDir & "\" & "Kindersicherung Einstellungen.ini"
$ini_zeit = @ScriptDir & "\" & "Kindersicherung Zeit.ini" ;wenn diese gelöscht wird, beginnt die Zeit von vorne zu laufen
$ini_beenden = @ScriptDir & "\" & "Kindersicherung Programm beenden.ini" ;wenn diese nicht mehr existiert, beendet sich das Script
;Sound-Datei Wecker
$sound_start = @TempDir & "\" & "start.mp3"
$sound_wecker = @TempDir & "\" & "wecker.mp3"
;Zeit um das Script vor Beginn wieder zu stoppen
$pause_scriptbeginn = 10 ;Sekunden
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "HideClock", "REG_DWORD", 1) ;Uhr rechts unten ausblenden (erst nach ab- und anmelden wirksam)
[/autoit] [autoit][/autoit] [autoit];Falls die Datei ... nicht existiert, diese erstellen (sonst läuft das Script nicht)
If Not FileExists($ini_beenden) Then _FileCreate($ini_beenden)
;Tool in den Autostart schreiben oder aus dem Autostart löschen
$autostart_wert = IniRead($ini_einstellungen, "Autostart", "eintragen", "")
If $autostart_wert = "ja" Then
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Kindersicherung", "REG_SZ", @ScriptFullPath)
Else
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Kindersicherung")
EndIf
;Hotkeys aktivieren
HotKeySet("{TAB}", "_tool_beenden") ; Taste: TAB
HotKeySet("{F7}", "_tool_beenden") ; Taste: F7
HotKeySet("{RIGHT}", "_tool_beenden"); Taste: Pfeil rechts
;Startsound spielen, damit man weiß wann das Script beginnt (ab hier hat man 10 Sekunden Zeit das Script zu beenden)
SoundPlay($sound_start, 1)
Sleep($pause_scriptbeginn*1000) ; 10 Sekunden um die Kindersicherung zu deaktivieren
[/autoit] [autoit][/autoit] [autoit];Hotkeys wieder deaktivieren
HotKeySet("{TAB}")
HotKeySet("{F7}")
HotKeySet("{RIGHT}")
;Wochentag als Zahl
$wochentag = _DateToDayOfWeek(@YEAR, @MON, @MDAY) ;1=Sonntag 2=Montag, ...
;Minuten, Datum auslesen
$max_zeit_unter_der_woche = IniRead($ini_einstellungen, "unter der Woche", "max Minuten", "")
$max_zeit_wochenende = IniRead($ini_einstellungen, "Wochenende", "max Minuten", "")
$heute_an = IniRead($ini_zeit, "heute an", "verbrauchte Minuten", "") +$pause_scriptbeginn/60
$letzter_start = IniRead($ini_zeit, "letzter start", "datum", "")
;prüfen, ob der PC heute schon an war
If $letzter_start = "" Or $letzter_start <> _NowDate() Then
IniWrite($ini_zeit, "letzter start", "datum", _NowDate()) ;heutiges Datum in ini schreiben
$heute_an = 0 ;heute verbrauchte Minuten auf 0 setzen
IniWrite($ini_zeit, "heute an", "verbrauchte Minuten", $heute_an)
EndIf
;sonstiger Tag oder Wochenende
If $wochentag >= 2 And $wochentag <= 6 Then
$max_zeit = $max_zeit_unter_der_woche
Else
$max_zeit = $max_zeit_wochenende
EndIf
;PC-Zeit bereits aufgebraucht?
If $heute_an < $max_zeit Then ;Zeit aufgebraucht >>> Sound abspielen
Do ;alle 10 Sekunden wird geprüft, ob die Zeit überschritten wurde (ini wird auch aktualisiert), falls ja >>> Sound abspielen
If Not FileExists($ini_beenden) Then Exit ;Script beenden, falls die Datei ... nicht existiert
$timer_beginn = TimerInit()
sleep(10000) ; 10 Sekunden
$heute_an = Round(TimerDiff($timer_beginn)/1000/60 + $heute_an, 2)
IniWrite($ini_zeit, "heute an", "verbrauchte Minuten", $heute_an)
Until $heute_an > $max_zeit
EndIf
If Not FileExists($ini_beenden) Then Exit ;Script beenden, falls die Datei ... nicht existiert
_shutdown()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _tool_beenden() ;Funktion um das Script nach dem Start direkt wieder zu beenden
If _IsPressed("09") And _IsPressed("76") And _IsPressed("27") Then Exit
EndFunc
Func _shutdown() ;was der PC nach der max Zeit machen soll
$meldung_pc_aus = IniRead($ini_einstellungen, "Meldung", "PC aus", "")
$meldung_sound = IniRead($ini_einstellungen, "Meldung", "Sound", "")
$meldung_minuten = IniRead($ini_einstellungen, "Meldung", "Minuten", "")
If $meldung_pc_aus = "ja" And $meldung_sound = "ja" Then ;PC aus: "ja" Sound: "ja"
$timer_beginn = TimerInit()
Do
SoundPlay($sound_wecker, 1)
$Zeitunterschied = TimerDiff($timer_beginn)/1000
Until $Zeitunterschied >= ($meldung_minuten*60) Or Not FileExists($ini_beenden) ;x Sekunden den Sound spielen, dann PC aus oder Script beenden, falls der Prozess oder die Datei ... nicht mehr existiert
If FileExists($ini_beenden) Then Shutdown(5)
Exit
ElseIf $meldung_pc_aus <> "ja" And $meldung_sound = "ja" Then ;PC aus: "nein" Sound: "ja"
Do
SoundPlay($sound_wecker, 1) ;Sound unendlich
Until Not ProcessExists(@ScriptName) Or Not FileExists($ini_beenden) ;Script beenden, falls der Prozess oder die Datei ... nicht mehr existiert
ElseIf $meldung_pc_aus = "ja" And $meldung_sound <> "ja" Then ;PC aus: "ja" Sound: "nein"
Shutdown(5)
Exit
EndIf
EndFunc