Ich hatte schon mal ein ähnliches Skript, hab aber jetzt eine kleine Gui azugebaut.
Spoiler anzeigen
#AutoIt3Wrapper_Res_LegalCopyright = ©funkey
#AutoIt3Wrapper_Res_Fileversion = 2.0
#AutoIt3Wrapper_Res_Description = Monitor-AutoStandby
Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)
Opt('GUIOnEventMode', 1)
Global Const $lciWM_SYSCommand = 274
Global Const $lciSC_MonitorPower = 61808
Global Const $lciPower_Off = 2
Global Const $lciPower_On = -1
Global $title= "Monitor-AutoStandby"
Global $IniFile = @ScriptDir & '\Monitor-AutoStandby.ini'
Global $aTime[14]
Global $MonitorIsOff = False
[/autoit] [autoit][/autoit] [autoit]GUICreate($title, 230, 280)
GUISetOnEvent(-3, '_Exit')
GUIRegisterMsg(0x004E, '_SaveTimes')
GUICtrlCreateLabel('Monitor ein', 80, 10, 60, 20, 0x201)
GUICtrlCreateLabel('Monitor aus', 150, 10, 60, 20, 0x201)
GUICtrlCreateButton('Start', 70, 242, 90, 30)
GUICtrlSetFont(-1, 16, 1000)
GUICtrlSetOnEvent(-1, '_Start')
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
TrayCreateItem('Einstellungen')
TrayItemSetOnEvent(-1, '_Show')
TrayCreateItem('')
TrayCreateItem('Beenden')
TrayItemSetOnEvent(-1, '_Exit')
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(20000)
WEnd
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
Func _Start()
GUISetState(@SW_HIDE)
AdlibEnable('_Check', 500)
EndFunc
Func _Show()
AdlibDisable()
GUISetState(@SW_SHOW)
EndFunc
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
Func _Wochentag($WDAY)
Local $aWoTa[7] = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']
Return $aWoTa[$WDAY -1]
EndFunc
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
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
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
Func _Exit()
_Monitor_ON()
Exit
EndFunc