Inaktiv --> shutdown

  • Jaja, meine Mudda müsstet ihr kennen ;)

    Macht ihren PC an, geht vor weg und kommt auch nicht
    wieder :P
    Und wir sind dann die blöden die ihren PC hinter ihr aus machen ;)

    Und das ist auch schon der Grund, warum ich mich in
    AutoIt reingearbeitet habe xD

    Denn:
    Bei Windoof kann man den PC in standby / Ruhezustand versetzen lassen,
    aber nicht bei Inaktivität ausschalten. Windoof halt.


    Mir scheint mein Script dazu relativ ausgereift
    (Ideen / Verbesserungen werden dankend angenommen ^^),
    würd mich über eure Meinungen freuen, und wenns wer
    nutzen will... greif zu, ich kanns ja nicht verhindern ;)

    Ahja.. dieses komische rumgerechne mit $sleep und $wait kommt
    daher, dass ich inzwischen 5 versionen von dem Script geschrieben hab,
    und in der ersten Versuchen ich noch mit Sleep's gearbeitet hab,
    was das ganze ungenau und träge machte.. :P
    könnt ihr kürzen ^^

    (Für die ersten Versionen würdet ihr mich sowieso nur auslachen,
    deshalb lass ich die ma vorerst weg ^^)

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.2.0
    Author: noels

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

    Script Function:
    Herunterfahren bei Inaktivitität, CPU-schonend :D
    Inklusive Autostart und speichern der Zeiteinstellung in einer Ini.

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

    #ce ----------------------------------------------------------------------------

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

    #include <GuiConstants.au3>
    #include <Constants.au3>

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

    RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Inaktiv5.1" )
    If @error Then
    $answer = MsgBox( 4+32, "Autostart", "Möchten Sie das Programm in den" & @CRLF & "Autostart setzen?" )
    If $answer = 6 Then
    RegWrite( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Inaktiv5.1", "REG_SZ", @ScriptFullPath )
    ElseIf $answer = 7 Then
    MsgBox( 0, "Autostart", "Das Programm wurde nicht in den" & @CRLF & "Autostart gesetzt." )
    EndIf
    EndIf

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

    Dim $i = 0
    $sleep = IniRead( @MyDocumentsDir&"\Inaktiv.ini", "Sleep", "Minuten", 20 )
    Dim $wait = $sleep*60000

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

    Opt("TrayAutoPause", 0 )
    Opt( "TrayMenuMode", 1 )
    Opt( "GUIOnEventMode", 1 )
    Opt( "TrayOnEventMode", 1 )

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

    $tray_wieder = TrayCreateItem( "Wiederherstellen" )
    TrayItemSetOnEvent( $tray_wieder, "wieder" )
    $tray_exit = TrayCreateItem( "Exit" )
    TrayItemSetOnEvent( $tray_exit, "quit" )

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

    $main = GuiCreate("Inaktiv5.1", 371, 135,-1, -1 )
    $menu = GUICtrlCreateMenu( "&Datei" )
    $zeit_def = GUICtrlCreateMenuitem( "Zeit zum Shutdown", $menu )
    $deinstall = GUICtrlCreateMenuitem( "Deinstallieren?", $menu )
    GUICtrlSetOnEvent( $deinstall, "deinstall" )
    GUICtrlSetOnEvent( $zeit_def, "einstellungen" )
    $Progress_1 = GuiCtrlCreateProgress(30, 40, 310, 20)
    $Button_2 = GuiCtrlCreateButton("Beenden", 220, 90, 110, 20)
    GUICtrlSetOnEvent( $Button_2, "quit" )
    GUISetOnEvent( $GUI_EVENT_MINIMIZE, "mini" )
    GUISetOnEvent( $GUI_EVENT_CLOSE, "mini" )
    GuiSetState(@SW_HIDE)

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

    While 1
    $ax = MouseGetPos(0)
    $ay = MouseGetPos(1)
    Sleep( 30000 ) ;alle 30 sec abfragen
    $bx = MouseGetPos(0)
    $by = MouseGetPos(1)
    $timer = TimerInit()
    While $ax = $bx And $ay = $by
    $bx = MouseGetPos(0)
    $by = MouseGetPos(1)
    Sleep( 1000 )
    $diff = TimerDiff( $timer )
    GUICtrlSetData( $Progress_1, ($diff/$wait)*100 )
    If $diff/$wait > 1 Then
    Shutdown( 13 )
    EndIf
    WEnd
    $timer = TimerInit()
    $diff = TimerDiff( $timer )
    GUICtrlSetData( $Progress_1, ($diff/$wait)*100 )
    WEnd

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

    Func quit()
    Exit
    EndFunc

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

    Func mini()
    GUISetState( @SW_HIDE, $main )
    EndFunc

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

    Func wieder()
    GUISetState( @SW_SHOW, $main )
    EndFunc

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

    Func einstellungen()


    Opt( "GUIOnEventMode", 0 )
    $opt_gui = GuiCreate("Optionen", 248, 133,-1, -1 )

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

    $Input_1 = GuiCtrlCreateInput($sleep, 40, 50, 30, 20)
    $Label_2 = GuiCtrlCreateLabel("min: 10 max: 120", 40, 20, 160, 20)
    $Label_3 = GuiCtrlCreateLabel("Minuten bis zum Shutdown", 80, 50, 140, 20)
    $Button_4 = GuiCtrlCreateButton("OK", 80, 90, 80, 20, $BS_DEFPUSHBUTTON)
    GuiSetState()
    $x = 1
    While $x = 1
    $msg = GUIGetMsg()
    If $msg = $Button_4 Then
    $sleep = GUICtrlRead( $Input_1 )
    $check = StringIsDigit ( $sleep )
    If $check = 0 Then
    MsgBox( 48, "Error", "Zahl bitte NICHT ausschreiben ;)" )
    ElseIf $check = 1 Then
    If $sleep > 120 or $sleep < 10 Then
    MsgBox( 48, "Error", "Mindestens 10, höchstens 120 Minuten!" )
    ElseIf $sleep > 9 And $sleep < 121 Then
    IniWrite( @MyDocumentsDir&"\Inaktiv.ini", "Sleep", "Minuten", $sleep )
    $wait = $sleep*60000
    GUIDelete( $opt_gui )
    Opt( "GUIOnEventMode", 1 )
    $x = 2
    EndIf
    EndIf
    EndIf
    WEnd
    EndFunc

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

    Func deinstall()
    $de_ans = MsgBox( 32+4, "Deinstallieren", "Möchten Sie das Programm vollständig" & @CRLF & "von Ihrem Rechner entfernen?" )
    If $de_ans = 6 Then
    RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Inaktiv5.1" )
    If Not @error Then
    RegDelete( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Inaktiv5.1" )
    EndIf
    FileDelete( @MyDocumentsDir&"\Inaktiv.ini" )
    GUIDelete( $main )
    FileDelete( @ScriptFullPath )
    ElseIf $de_ans = 7 Then
    MsgBox( 0, "Deinstallation", "Abgebrochen" )
    EndIf
    EndFunc

    [/autoit]

    Joa,
    mfG Noels

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Hi!

    nettes script, kommt mir aber ziemlich -- ähh - aufgebläht vor :D


    Könnte man sicher auch einfacher machen, aber für perfektionisten ists sicher besser :klatschen:

  • Ich hab seeehr viel durchprobiert..
    alles andere war reaktionsträge, ungenau,
    oder übelzt Speicherfressend
    ( 50 % cpu - auslastung -- ich hab nen DualCore. ) ;)

    Hast denn ne Idee, wo man noch kürzen kann?

    Ach... und ich könnte das Script noch auf
    Tastatur reagieren lassen.... :p

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Wie willst das sonst machen ?
    Wenn de mit Sleep arbeitest wird das Programm träge
    --> reagiert kaum noch.

    Edit:
    Und mit Timern erschien mir das simpel ^^

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    Einmal editiert, zuletzt von noels (25. April 2007 um 21:33)