<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Выключение монитора по горячей клавише]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=2970&amp;type=atom" />
	<updated>2009-03-29T20:34:23Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=2970</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Выключение монитора по горячей клавише]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=21068#p21068" />
			<content type="html"><![CDATA[<p>А вот <a href="http://forum.script-coding.com/viewtopic.php?pid=16679#p16679">здесь</a> я постил вариант, в котором после выключения, монитор включается только клавишей ESC, и не включается ни от шевеления мышью, ни от нажатия других клавиш.<br />Чтобы было в куче, постну его сюда:</p><div class="codebox"><pre><code>Loop
{
    Sleep, 400 ; пауза, чтобы не обрабатывалась вызывающая клавиша (мышь), и не молотить лишнего
    SendMessage, 0x112, 0xF170, 2,, Program Manager ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER.
    ; Используйте 2, чтобы выключить монитор
    ; Используйте -1 вместо 2, чтобы включить монитор
    ; Используйте 1 вместо 2, чтобы активизировать режим &quot;малой мощности&quot; дисплея
}

~ESC:: ; ESC - завершить скрипт
    SendMessage, 0x112, 0xF170, -1,, Program Manager ; включить монитор
    ExitApp ; завершить скрипт
Return ; для красоты :)</code></pre></div><p>А в моём постоянно загруженном скрипте заюзан немного другой вариант: при обычном нажатии WIN+PgUp включается заставка, при удержании WIN и ДВОЙНОМ нажатии PgUp, выключается монитор.<br />Включается монитор только после шевеления мышью.<br /></p><div class="codebox"><pre><code>; ========== ЗАСТАВКА/ВЫКЛЮЧЕНИЕ МОНИТОРА ==================
#PgUp:: ; WIN+PgUp - заставка (ДВОЙНОЕ нажатие - выключение монитора)
AppsKey &amp; PgUp:: ; AppsKey+PgUp - заставка (ДВОЙНОЕ нажатие - выключение монитора)
;-----------------------------------------------------------------------------
    If Count_Presses &gt; 0 ; если таймер уже запущен
    {
        Count_Presses += 1 ; плюсуем каждое нажатие клавиши (число будет обрабатываться в подпрограмме соответствующего таймера)
        Return ; закончить обработку горячей клавиши (ее дальнейшую обработку уже определяет таймер и его подпрограмма)
    }
    ; Иначе - это первое нажатие из новой серии
    Count_Presses = 1 ; выставляем флаг, что клавиша один раз нажата
    SetTimer, Timer_Presses_5, 400 ; переходить к указанной подпрограмме через каждые 400 миллисекунд
Return ; закончить обработку горячей клавиши

Timer_Presses_5: ; подпрограмма действий в зависимости от количества нажатий
    SetTimer, Timer_Presses_5, Off ; выключить таймер
    If Count_Presses = 1 ; если клавиша нажата однажды...
        SendMessage, 0x112, 0xF140, 0,, Program Manager ; запустить скринсейвер (0x112 is WM_SYSCOMMAND, and 0xF140 is SC_SCREENSAVE)
    Else If Count_Presses = 2 ; если клавиша нажата дважды...
    {
        CoordMode, Mouse, Screen ; установить абсолютные координаты для мыши
        MouseGetPos, XStart, YStart ; получить начальные координаты мыши
        Loop ; начать цикл с выключением монитора
        {
            Sleep, 200 ; пауза, чтобы не обрабатывалась вызывающая клавиша
            SendMessage, 0x112, 0xF170, 1,, Program Manager ; активизировать режим &quot;малой мощности&quot; монитора (0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER)
            ; Используйте 2, чтобы выключить монитор
            ; Используйте -1 вместо 2, чтобы включить монитор
            ; Используйте 1 вместо 2, чтобы активизировать режим &quot;малой мощности&quot; монитора
            Sleep, 200 ; пауза, чтобы не молотить лишнего
            MouseGetPos, XCurrent, YCurrent ; получить текущие координаты мыши
            If ( XCurrent &lt;&gt; XStart ) ; если мышь передвинута
                Break ; закончить цикл с выключением монитора
        }
    }
    Count_Presses = ; сбросить счет и подготовится к следующему ряду нажатий
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Androgen]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=4</uri>
			</author>
			<updated>2009-03-29T20:34:23Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=21068#p21068</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Выключение монитора по горячей клавише]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=21038#p21038" />
			<content type="html"><![CDATA[<p>Э, маразм меня подвёл. Собственно, в справке уже есть пример на эту тему, хотя и не идентичный.<br /></p><div class="codebox"><pre><code>F11::
  Sleep, 1000
  SendMessage, 0x112, 0xF170, 2,, Program Manager  
Return</code></pre></div><div class="quotebox"><blockquote><p>; 0x112 - сообщение WM_SYSCOMMAND, 0xF170 - сообщение SC_MONITORPOWER.<br />; Примечание: для включения монитора используйте -1 вместо 2.<br />; Используйте 1 вместо 2, чтобы отправить монитор в спящий режим.</p></blockquote></div><p>Но что-то я не заметил особой разницы между 2 и 1.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2009-03-27T06:55:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=21038#p21038</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Выключение монитора по горячей клавише]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=21035#p21035" />
			<content type="html"><![CDATA[<p>Нажатие на F11 выключит монитор. Чтобы включить, достаточно подвигать мышью или нажать какую-либо клавишу. Пауза перед DllCall необходима, т.к. иначе монитор может выключиться раньше, чем будет отпущена клавиша, а отпускание клавиши будет воспринято как включающий сигнал.<br /></p><div class="codebox"><pre><code>F11::
  HWND_BROADCAST = 0xFFFF
  WM_SYSCOMMAND = 0x0112
  SC_MONITORPOWER = 0xF170

  Sleep, 1500
  DllCall(&quot;SendMessage&quot;, &quot;UInt&quot;, HWND_BROADCAST
                       , &quot;UInt&quot;, WM_SYSCOMMAND
                       , &quot;UInt&quot;, SC_MONITORPOWER
                       , &quot;Int&quot;, 2)
Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2009-03-27T04:14:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=21035#p21035</id>
		</entry>
</feed>
