Monitor zu bestimmten Zeiten ein- und ausschalten

  • Ich hatte schon mal ein ähnliches Skript, hab aber jetzt eine kleine Gui azugebaut.

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Res_LegalCopyright = ©funkey
    #AutoIt3Wrapper_Res_Fileversion = 2.0
    #AutoIt3Wrapper_Res_Description = Monitor-AutoStandby

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

    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt('GUIOnEventMode', 1)

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

    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1

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

    Global $title= "Monitor-AutoStandby"
    Global $IniFile = @ScriptDir & '\Monitor-AutoStandby.ini'
    Global $aTime[14]

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

    Global $MonitorIsOff = False

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

    GUICreate($title, 230, 280)
    GUISetOnEvent(-3, '_Exit')
    GUIRegisterMsg(0x004E, '_SaveTimes')

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

    GUICtrlCreateLabel('Monitor ein', 80, 10, 60, 20, 0x201)
    GUICtrlCreateLabel('Monitor aus', 150, 10, 60, 20, 0x201)

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

    GUICtrlCreateButton('Start', 70, 242, 90, 30)
    GUICtrlSetFont(-1, 16, 1000)
    GUICtrlSetOnEvent(-1, '_Start')

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

    For $i = 0 To 6
    GUICtrlCreateLabel(_Wochentag($i+1), 15, 30+30*$i, 60, 20, 0x200)
    $aTime[$i] = GUICtrlCreateDate(IniRead($IniFile, 'Ein', _Wochentag($i+1), "04:00"), 80, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    $aTime[$i+7] = GUICtrlCreateDate(IniRead($IniFile, 'Aus', _Wochentag($i+1), "20:00"), 150, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    Next

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

    TrayCreateItem('Einstellungen')
    TrayItemSetOnEvent(-1, '_Show')
    TrayCreateItem('')
    TrayCreateItem('Beenden')
    TrayItemSetOnEvent(-1, '_Exit')

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

    GUISetState()

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

    While 1
    Sleep(20000)
    WEnd

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

    Func _SaveTimes($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    $hCtrl = $lParam
    For $i = 0 To 6
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Ein', _Wochentag($i+1), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    For $i = 7 To 13
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Aus', _Wochentag($i-6), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    EndFunc

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

    Func _Start()
    GUISetState(@SW_HIDE)
    AdlibEnable('_Check', 500)
    EndFunc

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

    Func _Show()
    AdlibDisable()
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func _Check()
    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    Local $Aus = IniRead($IniFile, 'Aus', _Wochentag(@WDAY), "20:00")
    Local $Hour_Aus = StringLeft($Aus, 2), $Min_Aus = StringRight($Aus, 2)
    If $Ein = $Aus Then Return
    If @HOUR = $Hour_Aus And @MIN = $Min_Aus And $MonitorIsOff = False Then
    AdlibDisable()
    _Monitor_OFF()
    EndIf
    EndFunc

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

    Func _Wochentag($WDAY)
    Local $aWoTa[7] = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']
    Return $aWoTa[$WDAY -1]
    EndFunc

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

    Func _Monitor_ON()
    $MonitorIsOff = False
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_On)
    AdlibEnable('_Check', 500)
    EndFunc

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

    Func _Monitor_OFF()
    $MonitorIsOff = True
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

    While $MonitorIsOff = True
    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_Off)
    _IdleWaitCommit(0)
    Sleep(20)
    WEnd
    EndFunc

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

    Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
    $iSave = DllStructGetData ($LastInputInfo, 2)
    Sleep(60)
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    If @HOUR = $Hour_Ein And @MIN = $Min_Ein Then
    _Monitor_ON()
    EndIf

    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec; Or $MonitorIsOff = False
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
    EndFunc

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

    Func _Exit()
    _Monitor_ON()
    Exit
    EndFunc

    [/autoit]
  • tolles script, gefällt mir.
    funktioniert einwandfrei.

    als kleinen verbesserungsvorschlag würd ich aber noch 2 Hotkeys einfügen um den bildschirm aktivieren/deaktivieren zu können

    ansonsten saubere arbeit ;)

  • Super teil!


    Ich denke das ich das für andere sachen nehmen werde zumbeispiel programme an gewissen tagen und zeiten starten lassen oder ach "licht aus affe tot"

    bildschirm aus rechner aus, für sie kleinen!


    LG Kleiner

  • Da wird (glaube ich) einfach das Signal unterbrochen, dabei schalten sich die PC-Monitore immer aus. Oder?

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)