• Hallo Leute,

    es ist endlich soweit ich habe nun nach einiger Arbeit und herumfragerei mein Script fertiggestellt.
    Es heisst PC Laufzeit Creator, mit diesem Programm kann man dem PC eine eigene Laufzeit verpassen, nach ablauf der Zeit meldet sich das System selbstständig ab man wird vorher nochmal gewarnt und man kann Dinge speichern und schließen, Ich denke eine Minute dafür sollten reichen. Dieses Programm ist Hilfreich wenn man mal seinen Sohn/Tochter an den PC lässt, so lässt es sich besser Kontrolliern wie lange sie an dem PC bleiben dürfen.

    Ich habe das Script so Programmiert, dass wenn man in das Inputfeld eine Null eingibt, dann wird das Programm beendet und der PC ist an keine Laufzeit gebunden. seht euch das Programm ruhig selbst an :)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #Include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Misc.au3>
    #include <TabConstants.au3>
    #Include <Date.au3>
    #Include <WinAPI.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <SliderConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GUIMenu.au3>
    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Zeit = 0, $Timer

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("PC Laufzeit", 459, 89, 340, 299, BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS,$WS_EX_LAYERED))
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die gewünschte PC laufzeit in Minuten ein!", 8, 8, 444, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $minuten = GUICtrlCreateInput("60", 16, 48, 145, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
    $Button1 = GUICtrlCreateButton("Zeit Setzen", 168, 48, 75, 25, 0)
    $input1 = GUICtrlCreateInput("", 260, 48, 180, 21, $ES_READONLY)
    ControlDisable ($Form1,"",$input1)
    GUICtrlSetState($Button1, $GUI_DEFBUTTON)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    WinSetState("[CLASS:Shell_TrayWnd]","",@SW_HIDE) ; Taskbar Verstecken
    WinSetState("[TITLE:Start;CLASS:Button]","",@SW_HIDE) ; Versteckt Startbutton
    WinSetState("[CLASS:Progman]","",@SW_HIDE) ; Versteckt Desktop Icons

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Close()
    Case $Button1
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden
    $Zeit = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)
    If $string = 0 Then Exit
    GUISetState(@SW_HIDE)
    WinSetState("[CLASS:Progman]","",@SW_SHOW) ; Macht Desktop Icons wieder sichtbar
    WinSetState("[TITLE:Start;CLASS:Button]","",@SW_HIDE) ; Macht Startbutton wieder sichtbar
    WinSetState("[CLASS:Shell_TrayWnd]","",@SW_SHOW) ; Taskabr sichtbar machen
    EndSwitch
    Time()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Countdown()
    Local $x = $Zeit - TimerDiff($Timer)/1000
    ToolTip("Restzeit: " & _Sek2StdMinSek($x),0,0,$titel,1)
    ;TrayTip($titel,"Restzeit: " & _Sek2StdMinSek($x),5,1) ;<-- Das ist eine weitere möglichkeit die ablaufende Zeit anzeigen zu lassen...
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    If ($x <= 0) Then MsgBox(0,"Schluss","Die Zeit ist abgelaufen Sie werden in einer Minute abgemeldet! Goodbye! Made by Ququknife ...")
    Sleep(60000)
    If ($x <= 0) Then Shutdown(0)
    EndFunc


    ;-----------------------------------------------------------------------------------------------------------------

    ; Funktion zum umrechnen von Sekunden in Stunden, Minuten, Sekunden
    Func _Sek2StdMinSek($value)
    ; Hier eine kleine Auswahl von Formaten, diese bitte bei dem Return Befehl mit angeben.
    $format1 = "%02d:%02d:%02d"
    $format2 = "%02d:%02d"
    $format3 = "%02d Std. %02d Min. %02d Sek."
    $format4 = "%02d Std. %02d Min."

    [/autoit] [autoit][/autoit] [autoit]

    $std = Floor($value / (60*60)) ; Berechnung der Stunden
    $value = $value - ((60*60) * $std) ; Berechnung des Restwertes der Sekunden
    $min = Floor($value / (60)) ; Berechnung der Minuten
    $sek = $value - ((60) * $min) ; Rest Sekunden

    [/autoit] [autoit][/autoit] [autoit]

    Return StringFormat($format3,$std,$min,$sek) ; Rückgabe des formatierten Strings
    EndFunc

    ;===================== Datum / Zeit in Inputbox darstellen ==================================

    Func Time()
    $Time = _NowTime(5)
    $Date = _NowDate()
    GUICtrlSetData ($input1,"Time:"&" "&$Time&" || "&"Date:"&" "&$Date)
    EndFunc

    ;=============================================================================================

    ;==================== Programm kann nicht geschlossen werden =================================

    Func Close()
    ToolTip("Gesperrt")
    Sleep(2000)
    ToolTip("")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================================

    [/autoit]

    Lg
    Ququknife

  • Mal abgesehen das der Titel nix mit dem Inhalt zu tun hat, kann man das Script über das Trayicon bzw. im Taskmanager beenden.

    Massenhaft unnötige includes hast auch drin, es kann alles raus bis auf:

    Date.au3
    EditConstants.au3
    GUIConstantsEx.au3
    WindowsConstants.au3

    Auch geht dein Countdown für die Restzeit nicht.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • 1) Das kann man noch stark vereinfachen.
    2) Wenn man "0" eingibt wir das Programm zwar beendet, aber Desktop, Taskleiste und Startmenu werden nicht wieder sichtbar.
    3) Was ist der Sinn von $Befehl? Diese Variable wird doch nirgends verwendet oder habe ich da irgendwas übersehen?

  • Misst kommt davon wenn man nen Rat befolgt jetzt funktioniert des Script nicht mehr.

    Edit BugFix: Bitte Posts editieren, statt ständig im Minutentakt neu zu erstellen! Hab beide Folgeposts jetzt hier eingebunden.


    Ja die Variable $Befehl hab ich wohl vergessen rauszumachen als ich dazu etwas geschrieben hatte mich aber doch umentschieden hatte

    Also ich suche gerade nach einer Möglichkeit die einzelnen Fehler zu beheben, jede Hilfe ist willkommen!

  • Hier ich habs dir mal umgeschrieben. So kann das ganze auch nichtmehr via Icon und Taskmanager beendet werden:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("PC Laufzeit", 459, 89, 340, 299, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS, $WS_EX_LAYERED))
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die gewünschte PC laufzeit in Minuten ein!", 8, 8, 444, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $minuten1 = GUICtrlCreateInput("60", 16, 48, 145, 21, BitOR($ES_AUTOHSCROLL, $ES_NUMBER))
    $Button1 = GUICtrlCreateButton("Zeit Setzen", 168, 48, 75, 25, 0)
    $input1 = GUICtrlCreateInput("", 260, 48, 180, 21, $ES_READONLY)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $minuten = GUICtrlRead($minuten1)

    [/autoit] [autoit][/autoit] [autoit]

    If $minuten > 0 Then
    $final = _DateDiff('s', "1970/01/01 00:00:00", _NowCalc())
    $final = $final + (GUICtrlRead($minuten1) * 60)
    AdlibRegister("check")
    GUISetState(@SW_HIDE)
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system", "DisableTaskMgr", "REG_DWORD", 1)
    Else
    Exit
    EndIf
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    $state = WinGetState("PC Laufzeit")

    [/autoit] [autoit][/autoit] [autoit]

    If BitAND($state, 2) Then
    GUICtrlSetData($input1, _Now())
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func check()
    If _DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) > $final Then
    AdlibUnRegister("check")

    [/autoit] [autoit][/autoit] [autoit]

    SplashTextOn("Abmelden in", "60", 80, 50)
    For $x = 10 To 1 Step -1
    ControlSetText("Abmelden in", "", "Static1", $x)
    Sleep(1000)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system", "DisableTaskMgr", "REG_DWORD", 0)
    Shutdown(0)
    EndIf
    EndFunc ;==>check

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Also ich habe meinen Script bisschen verbessert
    Folgende Fehler sind behoben:

    - Bei Eingabe einer Null Schließt Programm und Gibt Desktop frei
    - ist nicht mehr über TrayIcon zu beenden
    - sinnlose #Includes sind weg

    Zu Guter letzt habe ich noch eine Funktion von Chip übernommen und zwar den SplashTextOn mit Countdown von 10 Sekunden Danke Chip das war eine gute Idee.
    Hier jetzt der überarbeitete Code:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #Include <Date.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Zeit = 0, $Timer

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("PC Laufzeit", 459, 89, 340, 299, BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS,$WS_EX_LAYERED))
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die gewünschte PC laufzeit in Minuten ein!", 8, 8, 444, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $minuten = GUICtrlCreateInput("60", 16, 48, 145, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER))
    $Button1 = GUICtrlCreateButton("Zeit Setzen", 168, 48, 75, 25, 0)
    $input1 = GUICtrlCreateInput("", 260, 48, 180, 21, $ES_READONLY)
    ControlDisable ($Form1,"",$input1)
    GUICtrlSetState($Button1, $GUI_DEFBUTTON)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    WinSetState("[CLASS:Shell_TrayWnd]","",@SW_HIDE) ; Taskbar Verstecken
    WinSetState("[TITLE:Start;CLASS:Button]","",@SW_HIDE) ; Versteckt Startbutton
    WinSetState("[CLASS:Progman]","",@SW_HIDE) ; Versteckt Desktop Icons

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Close()
    Case $Button1
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Zeit = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)
    If $string = 0 Then
    WinSetState("[CLASS:Progman]","",@SW_SHOW) ; Macht Desktop Icons wieder sichtbar
    WinSetState("[TITLE:Start;CLASS:Button]","",@SW_HIDE) ; Macht Startbutton wieder sichtbar
    WinSetState("[CLASS:Shell_TrayWnd]","",@SW_SHOW) ; Taskabr sichtbar machen
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_HIDE)
    WinSetState("[CLASS:Progman]","",@SW_SHOW) ; Macht Desktop Icons wieder sichtbar
    WinSetState("[TITLE:Start;CLASS:Button]","",@SW_HIDE) ; Macht Startbutton wieder sichtbar
    WinSetState("[CLASS:Shell_TrayWnd]","",@SW_SHOW) ; Taskabr sichtbar machen


    EndSwitch
    Time()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Countdown()
    Local $x = $Zeit - TimerDiff($Timer)/1000
    ToolTip("Restzeit: " & _Sek2StdMinSek($x),0,0,$titel,1)
    ;TrayTip($titel,"Restzeit: " & _Sek2StdMinSek($x),5,1) ;<-- Das ist eine weitere möglichkeit die ablaufende Zeit anzeigen zu lassen...
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    ;If ($x <= 0) Then MsgBox(0,"Schluss","Die Zeit ist abgelaufen Sie werden in einer Minute abgemeldet! Goodbye! Made by Ququknife ...")
    ;Sleep(60000)
    ;If ($x <= 0) Then Shutdown(0)
    If ($x <= 0) Then
    SplashTextOn("Abmelden in", "60", 80, 50)
    For $x = 10 To 1 Step -1
    ControlSetText("Abmelden in", "", "Static1", $x)
    Sleep(1000)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system", "DisableTaskMgr", "REG_DWORD", 0)
    Shutdown(0)
    EndIf

    EndFunc


    ;-----------------------------------------------------------------------------------------------------------------

    ; Funktion zum umrechnen von Sekunden in Stunden, Minuten, Sekunden
    Func _Sek2StdMinSek($value)
    ; Hier eine kleine Auswahl von Formaten, diese bitte bei dem Return Befehl mit angeben.
    $format1 = "%02d:%02d:%02d"
    $format2 = "%02d:%02d"
    $format3 = "%02d Std. %02d Min. %02d Sek."
    $format4 = "%02d Std. %02d Min."

    [/autoit] [autoit][/autoit] [autoit]

    $std = Floor($value / (60*60)) ; Berechnung der Stunden
    $value = $value - ((60*60) * $std) ; Berechnung des Restwertes der Sekunden
    $min = Floor($value / (60)) ; Berechnung der Minuten
    $sek = $value - ((60) * $min) ; Rest Sekunden

    [/autoit] [autoit][/autoit] [autoit]

    Return StringFormat($format3,$std,$min,$sek) ; Rückgabe des formatierten Strings
    EndFunc

    ;===================== Datum / Zeit in Inputbox darstellen ==================================

    Func Time()
    $Time = _NowTime(5)
    $Date = _NowDate()
    GUICtrlSetData ($input1,"Time:"&" "&$Time&" || "&"Date:"&" "&$Date)
    EndFunc

    ;=============================================================================================

    ;==================== Programm kann nicht geschlossen werden =================================

    Func Close()
    ToolTip("Gesperrt")
    Sleep(2000)
    ToolTip("")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================================

    [/autoit]

    Ich hoffe das Entspricht mehr euren Erwartungen... Kritik ist natürlich herzlich Willkommen hilft mir ja mein Programm zu verbessern

    Lg
    Ququknife