<?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=17383</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17383&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Получить номер монитора, на котором активное окно».]]></description>
		<lastBuildDate>Sun, 25 Sep 2022 09:31:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Получить номер монитора, на котором активное окно]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=154911#p154911</link>
			<description><![CDATA[<p>Здравствуйте!<br />При управление своим графическим окном Gui, он иногда изменяет размер(так задумано).</p><p>Чтобы при изменение размера окна, он случайно не вышел за пределы видимости монитора, он берёт значение монитора A_ScreenWidht и A_ScreenHeight, получает координаты окна, координаты вычитаются и передвигается в видимую область монитора.</p><p>Но оказалось это работает только с одним монитором, если мониторов два и более, то при перемещение Gui на второй монитор, то при изменения размера он прыгает на первый монитор.<br />Отсюда возникает вопрос:<br />Как распознавать на каком, в данный момент, мониторе находится мой интерфейс Gui?</p><p>Пока что я нахожу координаты так:<br /></p><div class="codebox"><pre><code>
    SettingsSound.Show(X Y) ; Вывожу окно
    WinGetPos &amp;X, &amp;Y, &amp;W, &amp;H, &quot;SettingsSound&quot; ; Получаю координаты окна
    Xr := X + W, Yr := Y + H ; Получаю координаты окна х2 и y2
    If Xr &gt; A_ScreenWidth
        {
            Xr := Xr - (Xr - A_ScreenWidth) - W
            SettingsSound.Move(Xr,,,)
}
    If Yr &gt; A_ScreenHeight
        {
        Yr := Yr - (Yr - A_ScreenHeight) - H
    SettingsSound.Move(, Yr,,)
        }
</code></pre></div><p>Сразу отмечу что код написан на Ahk V2, но я не прошу обязательной помощи именно по этой версии, мне хотя бы помочь на AHK_L, а дальше я сам преобразую в V2.<br />Проблема кроется в том, что рабочая область Windows не измеряется в пикселях, можно указать хоть x := 1000000 и хранить окна за рабочим столом, тогда как A_Screen Width/Height имеет координаты только текущего монитора.</p><p>Upd, нашел решение:</p><div class="codebox"><pre><code>
    SettingsSound.Show(X Y)
    WinGetPos &amp;X, &amp;Y, &amp;W, &amp;H, &quot;SettingsSound&quot;
    Xr := X + W, Yr := Y + H
    totalWidth := SysGet(78) ; Вся рабочая область всех мониторов по ширине
    totalHeight := SysGet(79) ; Вся рабочая область всех мониторов по высоте
    If Xr &gt; totalWidth
        {
            Xr := Xr - (Xr - totalWidth) - W
            SettingsSound.Move(Xr,,,)
}
    If Yr &gt; totalHeight
        {
        Yr := Yr - (Yr - totalHeight) - H
    SettingsSound.Move(, Yr,,)
        }
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Clannad5)]]></author>
			<pubDate>Sun, 25 Sep 2022 09:31:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=154911#p154911</guid>
		</item>
	</channel>
</rss>
