<?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>https://forum.script-coding.com/viewtopic.php?id=8000</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8000&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Экран выбора пользователя: отключение дисплея».]]></description>
		<lastBuildDate>Wed, 23 Jan 2013 08:10:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Экран выбора пользователя: отключение дисплея]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68796#p68796</link>
			<description><![CDATA[<p>Захотелось автоматически отключать дисплей при простое на локальном компьютере (Widows XP).<br />Для пользователей это сделать просто: Свойства экрана --&gt; Питание --&gt; Отключение дисплея.<br />Когда ни один пользователь не выполнил вход в систему, действуют настройки:<br /></p><div class="codebox"><pre><code>[HKEY_USERS\.DEFAULT\Control Panel\Desktop]
&quot;ScreenSaveTimeOut&quot;=&quot;600&quot;
&quot;ScreenSaveActive&quot;=&quot;1&quot;
&quot;SCRNSAVE.EXE&quot;=&quot;logon.scr&quot;</code></pre></div><p> То есть в реестре можно задать нужную программу и время простоя в секундах.</p><p>Но если хотя бы один пользователь выполнил вход в систему, программа-заставка не будет запущена. Зато можно воспользоваться планировщиком (спасибо <strong>smaharbA</strong> за подсказку).</p><p>Воспользуемся скриптом от <strong>YMP</strong>: <a href="http://forum.script-coding.com/viewtopic.php?id=2970">AHK: Выключение монитора по горячей клавише</a></p><div class="codebox"><pre><code>HWND_BROADCAST = 0xFFFF
  WM_SYSCOMMAND = 0x0112
  SC_MONITORPOWER = 0xF170

  DllCall(&quot;SendMessage&quot;, &quot;UInt&quot;, HWND_BROADCAST
                       , &quot;UInt&quot;, WM_SYSCOMMAND
                       , &quot;UInt&quot;, SC_MONITORPOWER
                       , &quot;Int&quot;, 2)</code></pre></div><p>Правда такой скрипт будет отключать дисплей в любом случае, а меня интересует только экран выбора пользователя. Чтобы скрпит понимал, требуется ли отключить дисплей в данный момент, хорошо бы знать идентификатор активного окна или имя процесса. Однако, мои попытки определить их при помощи команды <em>WinGet</em> не увенчались успехом. Зато <em>MouseGetPos</em> позволяет определить координаты курсора. Причём на экране выбора пользователя эти координаты принимают аномальные (зато постоянные) значения. Если определять положение курсора, запустив скрипт от имени любого пользователя, то X=9302696, Y=2010364338. Если от имени NT AUTHORITY\SYSTEM, то X=371720, Y=510. На других компьютерах и ОС не проверял, но X и Y точно не зависят от разрешения экрана.</p><p>В итоге получаем следующий скрипт:<br /></p><div class="codebox"><pre><code>MouseGetPos, X, Y
If (X &gt; A_ScreenWidth) OR (Y &gt; A_ScreenHeight)
{
HWND_BROADCAST = 0xFFFF
  WM_SYSCOMMAND = 0x0112
  SC_MONITORPOWER = 0xF170

  DllCall(&quot;SendMessage&quot;, &quot;UInt&quot;, HWND_BROADCAST
                       , &quot;UInt&quot;, WM_SYSCOMMAND
                       , &quot;UInt&quot;, SC_MONITORPOWER
                       , &quot;Int&quot;, 2)
}</code></pre></div><p>Компилируем и добавляем в Назначенные задания, чтобы запускался от имени администратора при простое 1 мин.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Wed, 23 Jan 2013 08:10:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68796#p68796</guid>
		</item>
	</channel>
</rss>
