So, ich habe das Skript weiter ausgebaut und verbessert, falls es jemand nutzen möchte. @Peter: das Rückstellen der Zeit dürfte auch schwer sein, da dies immer spätestens nach 59 Sek. geschehen müsste, der Counter zählt jede Minute stur hoch. Ist aber sowieso unwahrscheinlich, das Ding hat sich schon sehr gut bewährt.
Beim ersten Start werden ggf. noch Standardwerte in der Reg angelegt und bei jeder ANmeldung wird angezeigt, wie viel Zeit noch über ist. Diese "zeitinfo" lässt sich auch gefahrlos jederzeit als eigenständige Datei (Desktop) starten, also auch durch die Kids.
Außerdem habe ich noch ein recht komfortables Skript "einstellungen" erstellt, damit lassen sich alle Zeiten einfach modifizieren in der Reg. Die Skripte liegen wie bisher alle unter c:\windows\script (kann angepasst werden). Ließe sich an vielen Stellen sicher schöner programmieren, aber es läuft bisher zuverlässig!
#NoTrayIcon
#include <Constants.au3>
#include <Date.au3>
Local $skriptpfad = "c:\Windows\script\"
Local $datum, $zeit, $limit, $handle_read, $limit
Local $anzeige = 0
; Schreibe Standardwerte für Wochenende/Wochentag, falls noch nichts in der Reg
$tmp = RegRead ("HKEY_CURRENT_USER\Software\timer", "Wochentage")
if $tmp = "" then RegWrite ("HKEY_CURRENT_USER\Software\timer", "Wochentage", "REG_SZ", 45)
$tmp = RegRead ("HKEY_CURRENT_USER\Software\timer", "Wochenende")
if $tmp = "" then RegWrite ("HKEY_CURRENT_USER\Software\timer", "Wochenende", "REG_SZ", 60)
; allgemeines Limit für Wochenende oder Werktage auslesen
if @WDAY = 1 OR @WDAY = 7 then
$limit = 60
Else
$limit = 45
EndIf
; Falls Wochentag-spezifisches Limit in der Reg, dann verwende dieses (von Schlüssel 1=Sonntag bis 7 = Samstag)
$tmp = RegRead ("HKEY_CURRENT_USER\Software\timer", @WDAY)
if $tmp <> "" then
$limit = RegRead ("HKEY_CURRENT_USER\Software\timer", @WDAY)
EndIf
; schreibe heutiges Limit
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Limit", "REG_SZ", $limit)
While True
$datum = RegRead ("HKEY_CURRENT_USER\Software\timer", "Datum")
$counter = RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter")
;Wenn sich Datum geändert hat (neuer Tag hat begonnen) Counter zurücksetzen
If Not ($datum = @YEAR & "-" & @MON & "-" & @MDAY) Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", 0)
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Datum", "REG_SZ", @YEAR & "-" & @MON & "-" & @MDAY)
Else
; falls trotz abgelaufener Zeit nochmal neu angemeldet wird...
If $counter > $limit-1 Then
;MsgBox($MB_SYSTEMMODAL, "Hinweis zum Zeitlimit", "Heute stehen ingesamt " & $limit & " Minuten zur Verfügung." & @CRLF & "Davon sind noch count " & $counter & " Minuten übrig.", 20)
_Exit ()
EndIf
EndIf
;(neues) Datum setzen
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Datum", "REG_SZ", @YEAR & "-" & @MON & "-" & @MDAY)
;Wenn Counter leer ist dann auf 0 sezten, sonst hochzählen
$tmp = RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter")
If $tmp == "" Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", 0)
Else
$counter = RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter")
;nach Anmeldung Zeitinfo einmalig anzeigen lassen
if $anzeige = 0 Then
$anzeige = 1
run($skriptpfad&'zeitinfo.exe')
EndIf
Sleep (60000)
$counter = $counter + 1
; neuen Counter-Wert eintragen
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Counter", "REG_SZ", $counter)
EndIf
If $counter = $limit-5 Then
run($skriptpfad&'warnung.exe ' & $limit &' 5')
;_warnung ()
ElseIf $counter = $limit-2 Then
run($skriptpfad&'warnung.exe ' & $limit &' 2')
;_warnung ()
ElseIf $counter >= $limit Then
; Herunterfahren mit Meldung
run($skriptpfad&'exit.exe')
Sleep (5000)
; 1+4 = force-shutdown; 32+4 = force standby zum Testen
Shutdown(1+4)
Exit
;_Exit ()
EndIf
WEnd
Exit
Func _Exit ()
Beep(500, 500)
Sleep (100)
Beep(500, 500)
MsgBox(16, "Vorsicht!", "Die Zeit für heute ist abgelaufen!" & @CRLF & @CRLF & "Der PC wird JETZT heruntergefahren", 15)
Sleep (3000)
; 1+4 = force-shutdown; 32+4 = force standby zum Testen
Shutdown(1+4)
Exit
EndFunc
Func _warnung ()
Beep(500, 500)
Sleep (80)
Beep(500, 500)
MsgBox(16, "Vorsicht!", "Die Zeit für heute (" & $limit & " Minuten) ist fast abgelaufen!" & @CRLF & "Bitte die Programme beenden." & @CRLF & "Der PC fährt in " & $limit-$counter & " Minuten herunter!!!", 20)
EndFunc
Alles anzeigen
#NoTrayIcon
if RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") <> "" AND RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter") <> "" Then
MsgBox(262144+65536, "Hinweis zum Zeitlimit", "Heute stehen ingesamt " & RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") & " Minuten zur Verfügung." & @CRLF & @CRLF & "Davon sind noch " & RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") - RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter") & " Minuten übrig.", 20)
endif
#NoTrayIcon
#include <Constants.au3>
#include <MsgBoxConstants.au3>
Beep(500, 500)
Sleep (80)
Beep(500, 500)
MsgBox(16, "Vorsicht!", "Die Zeit für heute ist abgelaufen!" & @CRLF & @CRLF & "Der PC wird JETZT heruntergefahren", 20)
#NoTrayIcon
if RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") <> "" AND RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter") <> "" Then
MsgBox(262144+65536, "Hinweis zum Zeitlimit", "Heute stehen ingesamt " & RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") & " Minuten zur Verfügung." & @CRLF & @CRLF & "Davon sind noch " & RegRead ("HKEY_CURRENT_USER\Software\timer", "Limit") - RegRead ("HKEY_CURRENT_USER\Software\timer", "Counter") & " Minuten übrig.", 20)
endif
Neu:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ColorConstants.au3>
#include <FontConstants.au3>
; Zugangssperre
#RequireAdmin
While 1
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Zeitlimits festlegen", 310, 410, 192, 124)
$Label1 = GUICtrlCreateLabel("Bitte Zeitlimit pro Wochentag eingeben, falls", 20, 4, 700, 17)
$Label1 = GUICtrlCreateLabel("ohne Wert, werden die Werte unten verwendet.", 20, 26, 700, 17)
$Label1 = GUICtrlCreateLabel("Montag (" & RegRead("HKEY_CURRENT_USER\Software\timer", "2") & "):", 50, 74, 80, 17)
$Label2 = GUICtrlCreateLabel("Dienstag:", 50, 104, 80, 17)
$Label3 = GUICtrlCreateLabel("Mittwoch:", 50, 134, 80, 17)
$Label4 = GUICtrlCreateLabel("Donnerstag:", 50, 164, 80, 17)
$Label5 = GUICtrlCreateLabel("Freitag:", 50, 194, 80, 17)
$Label6 = GUICtrlCreateLabel("Samstag:", 50, 224, 80, 17)
$Label7 = GUICtrlCreateLabel("Sonntag:", 50, 254, 80, 17)
$Label6 = GUICtrlCreateLabel("Wochentage:", 20, 300, 100, 17)
$Label7 = GUICtrlCreateLabel("Wochenende:", 20, 330, 100, 17)
$Label8 = GUICtrlCreateLabel("Minuten", 180, 74, 70, 17)
$Label9 = GUICtrlCreateLabel("Minuten", 180, 104, 70, 17)
$Label10 = GUICtrlCreateLabel("Minuten", 180, 134, 70, 17)
$Label11 = GUICtrlCreateLabel("Minuten", 180, 164, 70, 17)
$Label12 = GUICtrlCreateLabel("Minuten", 180, 194, 70, 17)
$Label13 = GUICtrlCreateLabel("Minuten", 180, 224, 70, 17)
$Label14 = GUICtrlCreateLabel("Minuten", 180, 254, 70, 17)
$Label15 = GUICtrlCreateLabel("Minuten", 180, 300, 70, 17)
$Label16 = GUICtrlCreateLabel("Minuten", 180, 330, 70, 17)
$Input1 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "2"), 140, 70, 30, 21)
$Input2 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "3"), 140, 100, 30, 21)
$Input3 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "4"), 140, 130, 30, 21)
$Input4 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "5"), 140, 160, 30, 21)
$Input5 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "6"), 140, 190, 30, 21)
$Input6 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "7"), 140, 220, 30, 21)
$Input7 = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "1"), 140, 250, 30, 21)
$InputWT = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "Wochentage"), 140, 300, 30, 21)
$InputWE = GUICtrlCreateInput(RegRead("HKEY_CURRENT_USER\Software\timer", "Wochenende"), 140, 330, 30, 21)
$EscButton=GUICtrlCreateButton (" abbrechen ", 20, 370)
$SaveButton=GUICtrlCreateButton (" Übernehmen ", 115, 370)
$FertigButton=GUICtrlCreateButton (" Speichern ", 220, 370)
GUICtrlSetBkColor($Input1, $CLR_MONEYGREEN)
GUICtrlSetBkColor($Input2, $CLR_MONEYGREEN)
GUICtrlSetBkColor($Input3, $CLR_MONEYGREEN)
GUICtrlSetBkColor($Input4, $CLR_MONEYGREEN)
GUICtrlSetBkColor($Input5, $CLR_MONEYGREEN)
GUICtrlSetBkColor($Input6, 0xEECCCC)
GUICtrlSetBkColor($Input7, 0xEECCCC)
GUICtrlSetBkColor($InputWT, $CLR_MONEYGREEN)
GUICtrlSetBkColor($InputWE, 0xEECCCC)
GUICtrlSetFont($Label6, 9, $FW_BOLD)
GUICtrlSetFont($Label7, 9, $FW_BOLD)
GUICtrlSetFont($Label15, 9, $FW_BOLD)
GUICtrlSetFont($Label16, 9, $FW_BOLD)
GUICtrlSetFont($InputWT, 9, $FW_BOLD)
GUICtrlSetFont($InputWE, 9, $FW_BOLD)
GUISetState(@SW_SHOWNORMAL)
#EndRegion ### END Koda GUI section ###
Sleep (1000)
Local $nMsg = 0
While 1
$nMsg = GUIGetMsg()
Select
Case $nmsg = $FertigButton OR $nmsg = $SaveButton
$tmp = GUICtrlRead ($Input7)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "1", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "1")
EndIf
$tmp = GUICtrlRead ($Input1)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "2", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "2")
EndIf
$tmp = GUICtrlRead ($Input2)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "3", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "3")
EndIf
$tmp = GUICtrlRead ($Input3)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "4", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "4")
EndIf
$tmp = GUICtrlRead ($Input4)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "5", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "5")
EndIf
$tmp = GUICtrlRead ($Input5)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "6", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "6")
EndIf
$tmp = GUICtrlRead ($Input6)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "7", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "7")
EndIf
$tmp = GUICtrlRead ($InputWT)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Wochentage", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "Wochentage")
EndIf
$tmp = GUICtrlRead ($InputWE)
if $tmp < 9999 AND $tmp > 0 Then
RegWrite ("HKEY_CURRENT_USER\Software\timer", "Wochenende", "REG_SZ", $tmp)
Else
RegDelete ("HKEY_CURRENT_USER\Software\timer", "Wochenende")
EndIf
If $nmsg = $FertigButton Then
Exit
Else
ExitLoop
EndIf
Case $nmsg = $EscButton
GUIDelete($Form1)
Exit
Case $nmsg = $GUI_EVENT_CLOSE
GUIDelete($Form1)
Exit
EndSelect
WEnd
GUIDelete($Form1)
WEnd
Alles anzeigen