<?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="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17383&amp;type=atom" />
	<updated>2022-09-25T09:31:40Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=17383</id>
		<entry>
			<title type="html"><![CDATA[AHK: Получить номер монитора, на котором активное окно]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=154911#p154911" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Clannad5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39853</uri>
			</author>
			<updated>2022-09-25T09:31:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=154911#p154911</id>
		</entry>
</feed>
