Программное включение монитора
Компьютер мой - (обычно) работает в течении всего дня, выключается только на ночь. В связи с чем, когда он мне не нужен или меня за ним просто нет - я софтово отключаю монитор (для этих целей - используется одна из двух программок:
В них так-же имеется функционал включения (отключённого программно) монитора (до перехода на 8-ку - данные команды работали нормально), а вот после - они включают монитор на секунду, после чего он снова гаснет (при этом команда отключения - по прежнему работает правильно)... Вывод - в 8-ке что-то поменялось в этом плане, возможно есть какие-то встроенные команды - позволяющие включить монитор?
Neytrino писал:Компьютер мой - (обычно) работает в течении всего дня, выключается только на ночь. В связи с чем, когда он мне не нужен или меня за ним просто нет - я софтово отключаю монитор (для этих целей - используется одна из двух программок: EventGhost или NirCMD)...
В них так-же имеется функционал включения (отключённого программно) монитора (до перехода на 8-ку - данные команды работали нормально), а вот после - они включают монитор на секунду, после чего он снова гаснет (при этом команда отключения - по прежнему работает правильно)... Вывод - в 8-ке что-то поменялось в этом плане, возможно есть какие-то встроенные команды - позволяющие включить монитор?
Первый раз слышу о такой привычке, ну да ладно. Я поставил последнюю прогу, NirCMD. Сделал ярлык с параметром monitor off. У меня монитор отключается и не включается, пока я мышь не пошевелю. Винда 8 x64 Pro. Значит у вам просто в фоне какая то программа мешает и включает монитор обратно.
Singularity, Не совсем корректно изложил, у меня проблема не с выключением, а с включением выключенного...
P.S. а привычка эта связанна с тем - что при выполнении некоторых задач, комп управляется пультом...
Проблема абсолютно не понятна. Даже если не вспоминать, что монитор обычно легко выключается кнопочкой на нём (ну, может не у всех она такая же удобная, как у меня), есть такое сочетание клавиш, как Win+L. Блокирует учетную запись и через минуту неактивности выключает монитор.
К тому же, привычка блокировать компьютер, отходя от него, на мой взгляд куда более полезная, чем привычка просто отключать монитор.
...
Ага. Постскриптум сразу не заметил. Ну, написанное стирать всё-равно не буду.
В принципе, можно было бы в настройках электропитания выставить период неактивности для отключения монитора минут на пять, но тогда он же будет включаться, если нажать что-то на пульте. А это, как я понял, не нужно.
Upd. Погуглил,
1.
2. Нижеприведенный скрипт копируем в текстовый файл, изменив его расширение на au3.
3. Запускаем скрипт. Всё, дальше всё управляется хоткеями. Они описаны в окошке после запуска скрипта (окошко можно закрыть), при желании можно отредактировать скрипт, подставив нужные хоткеи или, например, выпилив это окошко при запуске, чтобы не раздражало при автозагрузке (удалить функцию MsgBox(...) ).
#NoTrayIcon
Global Const $lciWM_SYSCommand = 274
Global Const $lciSC_MonitorPower = 61808
Global Const $lciPower_Off = 2
Global Const $lciPower_On = -1
Global $MonitorIsOff = False
HotKeySet("{F9}", "_Monitor_OFF")
HotKeySet("{F10}", "_Monitor_ON")
HotKeySet("{Esc}", "_Quit")
MsgBox(64, "Monitor On/Off", "Нажмите F9, чтобы выключить монитор." & @LF & _
"Нажмите F10, чтобы включить монитор обратно." & @LF & _
"Нажмите ESC, чтобы включить монитор и выйти из программы.")
While 1
Sleep(10)
WEnd
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)
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))
Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False
Return DllStructGetData ($LastInputInfo, 2)-$iSave
EndFunc
Func _Quit()
_Monitor_ON()
Exit
EndFunc
6;iSave
EndFunc
Func _Quit()
_Monitor_ON()
Exit
EndFunc[/code]
Можно в AutoIT откомпилировать файл, чтобы больше не приходилось устанавливать сам AutoIt. Получится экзешник, который вроде как везде работать будет. Я бы сейчас скинул, но мне лень заливать куда-нибудь файл, мои горячие клавиши могут не понравиться, а сделать то же самое самому — минута делов. Так что лучше пусть тут исходный скрипт полежит, а там уже каждый себе как хочет настроит.
Минус: вроде нельзя повесить вкл/выкл на одну и ту же клавишу.
ProVal, а вы уверены что монитор будит именно данный код, а не ваше нажатие на клавишу "F10"?
Задача в том - чтобы запустив некое приложение (возможно с ключом) или выдав эмуляцию сочетания клавиш (что менее приветствуется, т.к. не все приложения понимают эмулированные нажатия) средствами Event Ghost - включить монитор (когда это будет нужно)...
Уверен. Потому что движение мышью или нажатия любых других клавиш никакой реакции не вызывают, кроме одной (только от мыши, на клавиатуру не реагирует у меня): монитор может на пару секунд проснуться, отобразить табличку, что он не подключен, и заснуть обратно. Если же нажать F10, то он подключается и просыпается окончательно, отобразив рабочий стол (или что там было открыто).
Система при этом реагирует на нажатия как положено.