<?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=13264</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13264&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Функции в параметрах, разрешение, масштабирование.».]]></description>
		<lastBuildDate>Sun, 03 Dec 2017 19:09:57 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121923#p121923</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 03 Dec 2017 19:09:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121923#p121923</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121915#p121915</link>
			<description><![CDATA[<p><strong>teadrinker</strong> и звените, мой косяк, между проверками перезагружал комп, масштабирование вставало на место, поэтому разные числа, да еще тема слетела, получился винегрет, теперь все правильно, абсолютно одинаковые результаты.</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sun, 03 Dec 2017 16:40:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121915#p121915</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121914#p121914</link>
			<description><![CDATA[<p><strong>stealzy</strong> Хорошо, как выделить клиентскую часть окна, точнее как указывать координаты, чтобы они относились к этой части? То что подразумевается здесь под клиентской частью, не отдает контролов, все что возвращает эта часть независимо от выбранного объекта. NIVSTChildWindow00007FF9138500001</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sun, 03 Dec 2017 16:26:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121914#p121914</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121913#p121913</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 03 Dec 2017 15:58:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121913#p121913</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121906#p121906</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 Dec 2017 10:21:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121906#p121906</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121905#p121905</link>
			<description><![CDATA[<p><strong>Viruzober</strong>, вы всегда сначала суете, а потом думаете?<br />Может сначала стоит определить, подвержено ли содержимое окна масштабированию? Измерьте отличаются ли расстояния при разных DPI.<br />Интерфейс нестандартный, значит скорее всего нет, масштабированию подвергается только внешняя часть окна, а не клиентская область.<br /></p><div class="codebox"><pre><code>CoordMode Mouse, Client</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 03 Dec 2017 10:13:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121905#p121905</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121904#p121904</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong>&nbsp; А как все таки рассчитывать координаты по отношению к масштабированию? Столько вариантов, пробовал со ScalingRatio, 193 выдало как 241.25 при масштабе 1.50. Засунул это все в основной скрипт, и курсор улетел не туда. Сейчас попробую с вашим вариантом что нибудь сообразить. Нашел руководство по A_ScreenDPI. Проверил ваш вариант, 193 превратилось в 289.5 при масштабе 1.5, и опять мимо.</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sun, 03 Dec 2017 08:06:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121904#p121904</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121902#p121902</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 03 Dec 2017 01:01:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121902#p121902</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121898#p121898</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 02 Dec 2017 21:14:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121898#p121898</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121897#p121897</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Огромное спасибо что помогаете. У меня правильная формула в первом посте? И еще, пните в сторону справки по функциям из dll, надо когда-то и их осваивать.</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sat, 02 Dec 2017 20:20:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121897#p121897</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121895#p121895</link>
			<description><![CDATA[<p>Исправил, забыл на 100 поделить.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 02 Dec 2017 19:34:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121895#p121895</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121894#p121894</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 02 Dec 2017 19:30:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121894#p121894</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121893#p121893</link>
			<description><![CDATA[<p><strong>teadrinker</strong> кнопка add Library, и все пункты открытого меню. В первом посте координаты кнопки add Library. Контролов этот софт не отдает, так как написан на qt. Эти координаты при разрешении 1920x1080. Масштабирование 100%. И звените, скрин не сразу понял как прикрепить. А вообще, как рассчитать масштабирование? хотелось бы разобраться.</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sat, 02 Dec 2017 19:23:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121893#p121893</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121892#p121892</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Скрин по позже сделаю, А насчет масштабирования, пробовал, работает только на 100. Координаты беру из встроенной утилиты в AHK. Вот я изначально не правильно копать начал, при смене разрешения все работает, а вот с масштабированием нет.</p>]]></description>
			<author><![CDATA[null@example.com (Viruzober)]]></author>
			<pubDate>Sat, 02 Dec 2017 19:11:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121892#p121892</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Функции в параметрах, разрешение, масштабирование.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121891#p121891</link>
			<description><![CDATA[<p><strong>Viruzober</strong>, можете скриншот привести, описать, куда нужно кликать, и как расчитываете координаты? Кроме того, можете попробовать на любом устройстве выставить масштабирование 100% через настройки экрана и проверить работоспособность скрипта, потом изменить масштабирование и снова проверить.</p><p>Вообще, при смене разрешения, если масштабирование не меняется, координаты объектов не должны меняться. Если меняется масштабирование, обычно меняются координаты объектов внутри окон относительно левого верхнего угла окна.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 02 Dec 2017 19:06:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121891#p121891</guid>
		</item>
	</channel>
</rss>
