<?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=13264&amp;type=atom" />
	<updated>2017-12-03T19:09:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13264</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121923#p121923" />
			<content type="html"><![CDATA[<p>Меню Пуск → Программы → AutoHotkey → Active Window Info (Window Spy) → Mouse Position → Client.<br /></p><div class="codebox"><pre><code>RegRead DisplayScale, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI
MsgBox % DisplayScale / 96
MsgBox % GetScalingRatio()
MsgBox % A_ScreenDPI / 96

GetScalingRatio()  {
	hDC := DllCall(&quot;GetDC&quot;, Ptr, 0, Ptr)
	hDPI := DllCall(&quot;GetDeviceCaps&quot;, Ptr, hDC, Int, LOGPIXELSX := 88)
	DllCall(&quot;ReleaseDC&quot;, Ptr, 0, Ptr, hDC)
	Return hDPI/24*25/100
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2017-12-03T19:09:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121923#p121923</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121915#p121915" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> и звените, мой косяк, между проверками перезагружал комп, масштабирование вставало на место, поэтому разные числа, да еще тема слетела, получился винегрет, теперь все правильно, абсолютно одинаковые результаты.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-03T16:40:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121915#p121915</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121914#p121914" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong> Хорошо, как выделить клиентскую часть окна, точнее как указывать координаты, чтобы они относились к этой части? То что подразумевается здесь под клиентской частью, не отдает контролов, все что возвращает эта часть независимо от выбранного объекта. NIVSTChildWindow00007FF9138500001</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-03T16:26:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121914#p121914</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121913#p121913" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Что за DPI окна?</p></blockquote></div><p>Аналогично -DPIScale или +DPIScale.<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Можно как-то узнать, масштабируется окно, или нет?</p></blockquote></div><p>Не знаю, не пробовал. Вот вроде <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/mt748624(v=vs.85).aspx">для 10</a>. Для неизветного окна на практике это видимо не понадобится, а для известного это можно проверить на практике. Вывод: если у окна +DPIScale, то просто умножаем координаты на (A_ScreenDPI / 96), иначе ничего не делаем. Координаты конечно только в клиентской области.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2017-12-03T15:58:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121913#p121913</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121906#p121906" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А в чём отличие?</p></blockquote></div><p>А я и не знал про A_ScreenDPI. </p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Вот, потому в общем случае будет полезен DPI самого окна, а не общий.</p></blockquote></div><p>Что за DPI окна? Можно как-то узнать, масштабируется окно, или нет?</p><div class="quotebox"><cite>Viruzober пишет:</cite><blockquote><p>пробовал со ScalingRatio, 193 выдало как 241.25 при масштабе 1.50. ... Нашел руководство по A_ScreenDPI. Проверил ваш вариант, 193 превратилось в 289.5 при масштабе 1.5, и опять мимо.</p></blockquote></div><p>Хотите сказать, эти варианты выдают разные числа при одинаковом масштабе?<br /></p><div class="codebox"><pre><code>MsgBox, % 193*A_ScreenDPI/96 . &quot;`n&quot; . 193*GetScalingRatio()

GetScalingRatio()  {
   hDC := DllCall(&quot;GetDC&quot;, Ptr, 0, Ptr)
   hDPI := DllCall(&quot;GetDeviceCaps&quot;, Ptr, hDC, Int, LOGPIXELSX := 88)
   DllCall(&quot;ReleaseDC&quot;, Ptr, 0, Ptr, hDC)
   Return hDPI/24*25/100
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2017-12-03T10:21:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121906#p121906</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121905#p121905" />
			<content type="html"><![CDATA[<p><strong>Viruzober</strong>, вы всегда сначала суете, а потом думаете?<br />Может сначала стоит определить, подвержено ли содержимое окна масштабированию? Измерьте отличаются ли расстояния при разных DPI.<br />Интерфейс нестандартный, значит скорее всего нет, масштабированию подвергается только внешняя часть окна, а не клиентская область.<br /></p><div class="codebox"><pre><code>CoordMode Mouse, Client</code></pre></div>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2017-12-03T10:13:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121905#p121905</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121904#p121904" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>&nbsp; А как все таки рассчитывать координаты по отношению к масштабированию? Столько вариантов, пробовал со ScalingRatio, 193 выдало как 241.25 при масштабе 1.50. Засунул это все в основной скрипт, и курсор улетел не туда. Сейчас попробую с вашим вариантом что нибудь сообразить. Нашел руководство по A_ScreenDPI. Проверил ваш вариант, 193 превратилось в 289.5 при масштабе 1.5, и опять мимо.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-03T08:06:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121904#p121904</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121902#p121902" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Попробуйте координаты, полученные по формуле для разных разрешений ещё домножить на ScalingRatio</p></blockquote></div><p>А в чём отличие?<br /></p><div class="codebox"><pre><code>X := 100
MsgBox % X * (A_ScreenDPI / 96)</code></pre></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Чтобы избежать такого масштабирования для своего GUI есть опция -DPIScale.</p></blockquote></div><p>Вот, потому в общем случае будет полезен DPI самого окна, а не общий.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2017-12-03T01:01:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121902#p121902</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121898#p121898" />
			<content type="html"><![CDATA[<p><strong>Viruzober</strong>, окно не полноэкранное, значит координаты надо отсчитывать от верхнего левого угла не самого окна, а его клиентской области.<br />Иначе координаты будут менятся при смене системных тем, толщины обрамления окон, масштабирования.<br /></p><div class="codebox"><pre><code>hWnd := WinExist(&quot;A&quot;)
myWinPos := WinGetP(hWnd)
WinGetTitle titl, ahk_id %hWnd%

MsgBox % titl &quot;`n&quot; myWinPos.x &quot; &quot; myWinPos.y &quot; &quot; myWinPos.w &quot; &quot; myWinPos.h &quot;`n&quot;
. myWinPos.Client.x &quot; &quot; myWinPos.Client.y &quot; &quot; myWinPos.Client.w &quot; &quot; myWinPos.Client.h &quot;`n&quot;
. myWinPos.Client2Win.x &quot; &quot; myWinPos.Client2Win.y &quot; &quot; myWinPos.Client2Win.w &quot; &quot; myWinPos.Client2Win.h

WinGetP(hwnd) {
	WinGetPos, x, y, w, h, ahk_id %hWnd%
	WinP := {x:x, y:y, w:w, h:h}
	VarSetCapacity(pt, 16)
	NumPut(x, pt, 0) || NumPut(y, pt, 4) || NumPut(w, pt, 8) || NumPut(h, pt, 12)
	if (!DllCall(&quot;GetClientRect&quot;, &quot;uint&quot;, hwnd, &quot;uint&quot;, &amp;pt))
		Return
	if (!DllCall(&quot;ClientToScreen&quot;, &quot;uint&quot;, hwnd, &quot;uint&quot;, &amp;pt))
		Return
	x := NumGet(pt, 0, &quot;int&quot;), y := NumGet(pt, 4, &quot;int&quot;)
	w := NumGet(pt, 8, &quot;int&quot;), h := NumGet(pt, 12, &quot;int&quot;)
	Client := {x:x, y:y, w:w, h:h}
	Client2Win := {x:x-WinP.x, y:y-WinP.y, w:w, h:h}
	Return WinP := {x:WinP.x, y:WinP.y, w:WinP.w, h:WinP.h, Client2Win:Client2Win, Client:Client}
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2017-12-02T21:14:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121898#p121898</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121897#p121897" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> Огромное спасибо что помогаете. У меня правильная формула в первом посте? И еще, пните в сторону справки по функциям из dll, надо когда-то и их осваивать.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-02T20:20:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121897#p121897</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121895#p121895" />
			<content type="html"><![CDATA[<p>Исправил, забыл на 100 поделить.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2017-12-02T19:34:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121895#p121895</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121894#p121894" />
			<content type="html"><![CDATA[<p>Попробуйте координаты, полученные по формуле для разных разрешений ещё домножить на ScalingRatio<br /></p><div class="codebox"><pre><code>MsgBox, % ScalingRatio := GetScalingRatio()

GetScalingRatio()  {
   hDC := DllCall(&quot;GetDC&quot;, Ptr, 0, Ptr)
   hDPI := DllCall(&quot;GetDeviceCaps&quot;, Ptr, hDC, Int, LOGPIXELSX := 88)
   DllCall(&quot;ReleaseDC&quot;, Ptr, 0, Ptr, hDC)
   Return hDPI/24*25/100
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2017-12-02T19:30:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121894#p121894</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121893#p121893" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> кнопка add Library, и все пункты открытого меню. В первом посте координаты кнопки add Library. Контролов этот софт не отдает, так как написан на qt. Эти координаты при разрешении 1920x1080. Масштабирование 100%. И звените, скрин не сразу понял как прикрепить. А вообще, как рассчитать масштабирование? хотелось бы разобраться.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-02T19:23:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121893#p121893</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121892#p121892" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> Скрин по позже сделаю, А насчет масштабирования, пробовал, работает только на 100. Координаты беру из встроенной утилиты в AHK. Вот я изначально не правильно копать начал, при смене разрешения все работает, а вот с масштабированием нет.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-12-02T19:11:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121892#p121892</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121891#p121891" />
			<content type="html"><![CDATA[<p><strong>Viruzober</strong>, можете скриншот привести, описать, куда нужно кликать, и как расчитываете координаты? Кроме того, можете попробовать на любом устройстве выставить масштабирование 100% через настройки экрана и проверить работоспособность скрипта, потом изменить масштабирование и снова проверить.</p><p>Вообще, при смене разрешения, если масштабирование не меняется, координаты объектов не должны меняться. Если меняется масштабирование, обычно меняются координаты объектов внутри окон относительно левого верхнего угла окна.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2017-12-02T19:06:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121891#p121891</id>
		</entry>
</feed>
