Войти

Показать полную графическую версию : [решено] Функция "отключения монитора"


sashadeg
05-08-2009, 23:16
Есть ли такая функция, чтобы прервать сигнал монитора с видео картой и соответственно отключить монитор?

Creat0R
06-08-2009, 00:27
Функции для отключения/включения монитора:

#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("{F11}", "_Monitor_OFF")
HotKeySet("{F10}", "_Monitor_ON")
HotKeySet("{Esc}", "_Quit")

MsgBox(64, "Monitor On/Off", "Press F11 to turn off the monitor." & @LF & _
"Press F10 to turn on the monitor back." & @LF & _
"Press ESC to turn on the monitor and exit program.")

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

Iska
06-08-2009, 03:33
Creat0R, попутный, интересующий меня, вопрос: Вы не замечали какую-либо разницу при использовании lParam = 1 (low power) и lParam = 2 (shut off), как в вышеприведённом Вашем скрипте (вроде бы некая разница должна быть, но визуально я не заметил различий)?

sashadeg
06-08-2009, 08:50
Да, спасибо Creator... Мне в личке proxi твой код скинул уже =) Ещё вчера его опробовал... Потрясающе!!!! Всё как и хотелось=) Даже с хоткеями точно попал =)

amel27
06-08-2009, 10:13
Iska, посмотри тут: "ENERGY STAR specification for Monitors/Displays (http://www.energystar.gov/index.cfm?fuseaction=find_a_product.showProductGroup&pgw_code=MO)",
иногда отличается временем включения монитора (на CRT мониторах было заметней)

Iska
06-08-2009, 11:52
amel27, за первое — знаю, но всё равно спасибо; за второе — отдельное спасибо: меня именно это интересовало, поскольку сам я, как писал выше, что на CRT, что на LCD этой разницы не видел.

angry_dog
07-01-2011, 17:46
Функции для отключения/включения монитора: »
Подскажите, как воспользоваться приведённым кодом?

Creat0R
08-01-2011, 00:04
как воспользоваться приведённым кодом? »
Ну... эта... как бы запустить нужно в скрипте :hmm:

angry_dog
08-01-2011, 00:27
Ну... эта... как бы запустить нужно в скрипте »
Создал текстовый файл, скопировал содержимое, поменял расширение на vbs, запустил.. ошибка. Что не так?

beve
08-01-2011, 00:36
поменял расширение на vbs, запустил.. ошибка »
Тема же посвящена языку Autoit (http://www.autoitscript.com/autoit3/index.shtml) и поэтому соответственно скрипт для него. Для начала почитайте про этот язык програмирования, установите его, далее уже можете поменять разрешение вашего файла со скриптом на *.au3 и уже запустить...




© OSzone.net 2001-2012