<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Выключение монитора по горячей клавише]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=2970</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=2970&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Выключение монитора по горячей клавише».]]></description>
		<lastBuildDate>Sun, 29 Mar 2009 20:34:23 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Выключение монитора по горячей клавише]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=21068#p21068</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Androgen)]]></author>
			<pubDate>Sun, 29 Mar 2009 20:34:23 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=21068#p21068</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Выключение монитора по горячей клавише]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=21038#p21038</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Fri, 27 Mar 2009 06:55:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=21038#p21038</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Выключение монитора по горячей клавише]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=21035#p21035</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Fri, 27 Mar 2009 04:14:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=21035#p21035</guid>
		</item>
	</channel>
</rss>
