<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Номер окна в Z-последовательности]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9971</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9971&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Номер окна в Z-последовательности».]]></description>
		<lastBuildDate>Sun, 14 Sep 2014 17:21:06 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86454#p86454</link>
			<description><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>&lt;...&gt; Почему пишется Ptr, а не Uint? И какая разница, если на работу кода это не влияет? Видимо, это просто запись &quot;для себя&quot;, типа комментария? &lt;...&gt;</p></blockquote></div><p>Размер данных совпадает, и в данном случае AHK позволяет &quot;вольности&quot;, не проверяя тип используемых данных, но судя по описанию функции, первый параметр рассматривается именно как указатель, а второй - как целое число без знака. Не хочется иметь в таком коротком коде &quot;глюк&quot; при запуске скрипта в системах с разной битностью или при переходе с AHK 32бит на 64-битную версию.</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 14 Sep 2014 17:21:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86454#p86454</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86451#p86451</link>
			<description><![CDATA[<p>А, значит в Z-последовательности находятся все окна в системе, а не только видимые верхнего уровня. А цикл перебирает окна.<br />Наивно думал, что цикл применен &quot;для надежности&quot; срабатывания.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 14 Sep 2014 11:48:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86451#p86451</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86450#p86450</link>
			<description><![CDATA[<p>Сначала ты получаешь дескриптор активного окна<br /></p><div class="codebox"><pre><code>hWnd := WinExist(&quot;A&quot;)</code></pre></div><p>а затем в цикле получаешь предыдущее по отношению к нему<br /></p><div class="codebox"><pre><code>NEXThWnd:= DllCall(&quot;GetWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;Uint&quot;, 2)</code></pre></div><p>То есть каждый раз один и тот же дескриптор. В моем примере <strong>hWnd</strong> меняется в цикле до тех пор, пока он не станет дескриптором окна, имеющего заголовок (Title).</p><p>Если так важно сохранить текущее активное окно, для этого можно использовать дополнительную переменную, но нужно учесть, что в данном примере при нажатии <strong>Numlock</strong> эта переменная будет каждый раз получать дескриптор активного окна.<br /></p><div class="codebox"><pre><code>#WinActivateForce
vk90::
   NEXThWnd := hWnd := WinExist(&quot;A&quot;)
   Loop {
      NEXThWnd:= DllCall(&quot;GetWindow&quot;, &quot;Ptr&quot;, NEXThWnd, &quot;Uint&quot;, 2)
      WinGetTitle, Title, ahk_id %NEXThWnd%
   } Until Title
   WinActivate, ahk_id %NEXThWnd%
Return

; Активировать окно, бывшее в фокусе при последнем нажатии NumLock
F12::
   WinActivate, ahk_id %hWnd%
Return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 14 Sep 2014 11:39:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86450#p86450</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86449#p86449</link>
			<description><![CDATA[<p>Благодарю, неочевидно!<br />Но отчего не работает код с разделением переменных исходного и искомого окна, который я привел выше?</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 14 Sep 2014 11:18:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86449#p86449</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86448#p86448</link>
			<description><![CDATA[<p>Все верно, только нужно учесть, что <strong>GW_CHILD</strong> и т.д. - это константы, определенные в заголовочном файле (winuser.h) при компиляции программ C/C++. Фактически в <strong>GetWindow</strong> передаются числа, а про константы AHK &quot;не знает&quot;.<br />Можно прописать в коде:<br /></p><div class="codebox"><pre><code>GW_HWNDNEXT = 2</code></pre></div><p>и вызывать получение дескриптора такой командой<br /></p><div class="codebox"><pre><code>Hwnd := DllCall(&quot;GetWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;Uint&quot;, GW_HWNDNEXT)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 14 Sep 2014 11:09:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86448#p86448</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86447#p86447</link>
			<description><![CDATA[<p>Спасибо, повесил на NumLock.<br />Но мне не понятно, как Вы до этого додумались?<br />Вот я читаю про ф-ю GetWindow:</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;GetWindow</div><div class="fancy_spoiler"><p>Функция GetWindow отыскивает дескриптор окна, который имеет определенное отношение (Z - последовательность или владелец) к заданному окну. </p><p>Синтаксис <br />HWND GetWindow<br />(<br />HWND hWnd,		// дескриптор первоначального окна<br />UINT uCmd 		// флажок отношения<br />);</p><p>Параметры </p><p>hWnd<br /> Идентифицирует окно. Отыскивает дескриптор окна, относящийся к этому окну, основанному на значении параметра uCmd. </p><p>uCmd<br /> Определяет отношение между определяемым окном и окном, чей дескриптор должен быть найден. Этот параметр может быть одним из следующих значений: <br />GW_CHILD - Найденный дескриптор идентифицирует дочернее окно наверху Z - последовательности, если определяемое окно - родительское окно; иначе, найденный дескриптор значение ПУСТО (NULL).Функция проверяет только дочерние окна заданного окна. Она не проверяет окна - потомки. <br />GW_HWNDFIRST - Найденный дескриптор идентифицирует окно того же самого типа, которое является самым высоким в Z - последовательности. Если определяемое окно - самое верхнее окно, дескриптор идентифицирует самое верхнее окно, которое является самым высоким в Z - последовательности. Если определяемое окно - окно верхнего уровня, дескриптор идентифицирует окно верхнего уровня, которое является самым высоким в Z - последовательности. Если определенное окно - дочернее окно, дескриптор идентифицирует сестринское окно, которое является самым высоким в Z - последовательности. <br />GW_HWNDLAST - Найденный дескриптор идентифицирует окно того же самого типа, который является самым низким в Z - последовательности. Если определяемое окно - самое верхнее окно, дескриптор идентифицирует самое верхнее окно, которое является самым низким в Z - последовательности. Если определяемое окно - окно верхнего уровня, дескриптор идентифицирует окно верхнего уровня, которое является самым низким в Z - последовательности. Если определяемое окно - дочернее окно, дескриптор идентифицирует сестринское окно, которое является самым низким в Z - последовательности. <br />GW_HWNDNEXT - Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности. Если определяемое окно - самое верхнее окно, дескриптор идентифицирует самое верхнее окно ниже определяемого окна. Если определяемое окно - окно верхнего уровня, дескриптор идентифицирует окно верхнего уровня ниже определяемого окна. Если определяемое окно - дочернее окно, дескриптор идентифицирует сестринское окно ниже определяемого окна. <br />GW_HWNDNEXT - Найденный дескриптор идентифицирует окно ниже определяемого окна в Z - последовательности. Если определяемое окно - самое верхнее окно, дескриптор идентифицирует самое верхнее окно ниже определяемого окна. Если определяемое окно - окно верхнего уровня, дескриптор идентифицирует окно верхнего уровня ниже определяемого окна. Если определяемое окно - дочернее окно, дескриптор идентифицирует сестринское окно ниже определяемого окна. <br />GW_OWNER - Найденный дескриптор идентифицирует окно владельца определяемого окна, если таковой имеется.</p></div></div><p>Почему второй параметр — число 2, а не строка GW_HWNDNEXT?<br />Почему пишется Ptr, а не Uint? И какая разница, если на работу кода это не влияет? Видимо, это просто запись &quot;для себя&quot;, типа комментария?<br />Почему используется одна переменная hwnd и для исходного, и для следующего окна? Я попробовал их разделить, но тогда код просто не работает!<br /></p><div class="codebox"><pre><code>#WinActivateForce
vk90::
   hWnd := WinExist(&quot;A&quot;)
   Loop {
      NEXThWnd:= DllCall(&quot;GetWindow&quot;, &quot;Uint&quot;, hWnd, &quot;Ptr&quot;, 2)
      WinGetTitle, Title, ahk_id %NEXThWnd%
   } Until Title
   WinActivate, ahk_id %NEXThWnd%
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 14 Sep 2014 10:59:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86447#p86447</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86442#p86442</link>
			<description><![CDATA[<p>Таким образом переключается между двумя последними окнами:<br /></p><div class="codebox"><pre><code>#WinActivateForce
F12::
   hWnd := WinExist(&quot;A&quot;)
   Loop {
      Hwnd := DllCall(&quot;GetWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;Uint&quot;, 2)
      WinGetTitle, Title, ahk_id %Hwnd%
   } Until Title
   WinActivate, ahk_id %Hwnd%
Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sun, 14 Sep 2014 07:01:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86442#p86442</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86437#p86437</link>
			<description><![CDATA[<p>Возможно, <a href="http://stackoverflow.com/questions/798295/how-can-i-use-getnextwindow-in-c">это</a> поможет?<br />Правда, что за хендл получается, выяснить не удалось - переключение было один раз, видимо случайно.<br /></p><div class="codebox"><pre><code>hWnd := WinExist(&quot;A&quot;)
NextWinHwnd := DllCall(&quot;GetWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;Uint&quot;, 2)
MsgBox % NextWinHwnd
WinActivate, ahk_id %NextWinHwnd%
Return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Sat, 13 Sep 2014 20:32:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86437#p86437</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86429#p86429</link>
			<description><![CDATA[<p>Думал об этом, но некрасиво как-то.<br />Пытался так:</p><div class="codebox"><pre><code>wCmd := &quot;GW_HWNDNEXT&quot;
WinGet, hWnd, ID, A

NextWinHwnd := DllCall(&quot;GetNextWindow&quot;, &quot;Uint&quot;, hWnd, &quot;Uint&quot;, wCmd)
MsgBox % NextWinHwnd
WinActivate, AHK_id %NextWinHwnd%</code></pre></div><p>Но хендл получить не удается</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 13 Sep 2014 12:56:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86429#p86429</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86424#p86424</link>
			<description><![CDATA[<p>Можно как нибудь отметить окна (запомнить их идентификаторы), затем уже переключаться между ними командой <em>WinActivate</em>.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Sat, 13 Sep 2014 10:13:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86424#p86424</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Номер окна в Z-последовательности]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86421#p86421</link>
			<description><![CDATA[<p>Как известно, при нажатии Alt-Tab, окна в меню выстраиваются в порядке их использования. Как бы узнать, скажем хендл второго окна в этом списке?<br />WinAPI?<br />Хочется сделать чисто программный аналог Alt-Tab м/у 2 окнами.</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sat, 13 Sep 2014 08:40:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86421#p86421</guid>
		</item>
	</channel>
</rss>
