<?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=11393</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11393&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Определить что в данный момент окно растягивается».]]></description>
		<lastBuildDate>Thu, 10 Mar 2016 22:44:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101783#p101783</link>
			<description><![CDATA[<div class="codebox"><pre><code>#Persistent
WS := new WatchSizing()

class WatchSizing
{
	__New()  {
		static EVENT_SYSTEM_MOVESIZESTART := 0xA, EVENT_SYSTEM_MOVESIZEEND := 0xB
			, EVENT_OBJECT_LOCATIONCHANGE := 0x800B, array := {}
		array.i := 0
		this.ptr := Object(array)
		this.hHookSizing := this.SetWinEventHook(EVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND, 0
															, RegisterCallback(&quot;HookProcSizing&quot;, &quot;F&quot;, 4, this.ptr), 0, 0, 0)
		this.hHookMoving := this.SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE, 0
															, RegisterCallback(&quot;HookProcMoving&quot;, &quot;F&quot;, 4, this.ptr), 0, 0, 0)
		this.hHookMaximising := this.SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE, 0
															, RegisterCallback(&quot;HookProcMaximising&quot;, &quot;F&quot;, 4), 0, 0, 0)
	}
	
	__Delete()  {
		DllCall(&quot;UnhookWinEvent&quot;, Ptr, this.hHookSizing)
		DllCall(&quot;UnhookWinEvent&quot;, Ptr, this.hHookMoving)
		DllCall(&quot;UnhookWinEvent&quot;, Ptr, this.hHookMaximising)
		ObjRelease(this.ptr)
	}
	
	SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags)  {
		return DllCall(&quot;SetWinEventHook&quot;, UInt, eventMin , UInt, eventMax , Ptr, hmodWinEventProc
					, Ptr, lpfnWinEventProc , UInt, idProcess , UInt, idThread, UInt, dwFlags, Ptr)
	}
}

HookProcSizing(hWinEventHook, event, hwnd, idObject)
{
	static EVENT_SYSTEM_MOVESIZESTART := 0xA, EVENT_SYSTEM_MOVESIZEEND := 0xB, OBJID_WINDOW := 0, obj
	if (idObject != OBJID_WINDOW)
		Return
	
	(!obj &amp;&amp; obj := Object(A_EventInfo))
	(event = EVENT_SYSTEM_MOVESIZESTART &amp;&amp; (obj.watching := 1, obj.hwnd := hwnd))
	(event = EVENT_SYSTEM_MOVESIZEEND &amp;&amp; (obj.watching := &quot;&quot;, obj.i := 0))
}

HookProcMoving(hWinEventHook, event, hwnd, idObject)
{
	static OBJID_WINDOW := 0, W_Prev, H_Prev, obj
	(!obj &amp;&amp; obj := Object(A_EventInfo))
	if !(idObject = OBJID_WINDOW &amp;&amp; obj.watching &amp;&amp; hwnd = obj.hwnd)
		Return
	
	if (obj.i++ = 0)
		WinGetPos,,, W_Prev, H_Prev, ahk_id %hwnd%
	if (obj.i = 2)  {
		WinGetPos,,, W, H, ahk_id %hwnd%
		if !(W = W_Prev &amp;&amp; H = H_Prev)
			SetTimer, AlertSizing, -10
	}
}

HookProcMaximising(hWinEventHook, event, hwnd, idObject)
{
	static OBJID_WINDOW := 0, arr := [], FuncObj := Func(&quot;AlertMaximizing&quot;).Bind(arr)
	if (idObject != OBJID_WINDOW)
		Return
	arr[1] := hwnd
	SetTimer, % FuncObj, -100
}

AlertSizing()
{
	ToolTip Sizing!
	SoundBeep, 500
}

AlertMaximizing(obj)
{
	static arr := []
	hwnd := obj[1]
	WinGet, MinMax, MinMax, ahk_id %hwnd%
	if (MinMax = 1 &amp;&amp; !arr.HasKey(hwnd))  {
		arr[hwnd] := 1
		ToolTip Maximized
		SoundBeep, 1000
	}
	if (MinMax != 1 &amp;&amp; arr.HasKey(hwnd))
		arr.Delete(hwnd)
}</code></pre></div><p>Это так, сходу, наверное, можно ещё оптимизировать.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 10 Mar 2016 22:44:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101783#p101783</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101769#p101769</link>
			<description><![CDATA[<p>У меня на практике тормозит весь скрипт.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 16:56:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101769#p101769</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101768#p101768</link>
			<description><![CDATA[<p>По моим представлениям, не будет часто выполняться, соответственно грузить, нет? Я пока не проверял.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 10 Mar 2016 16:41:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101768#p101768</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101767#p101767</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ну, можно в его HookProc Sleep вставить.</p></blockquote></div><p>А что это даст?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 16:16:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101767#p101767</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101765#p101765</link>
			<description><![CDATA[<p>Пришлёт, только не тебе. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>EVENT_OBJECT_LOCATIONCHANGE сильно грузит процесс</p></blockquote></div><p>Ну, можно в его HookProc Sleep вставить. На самом деле, совместив EVENT_SYSTEM_MOVESIZESTART и EVENT_OBJECT_LOCATIONCHANGE, скорее всего, можно достоверно получать начало изменения размера окна. Ну, и для отслеживания максимизации что-то придумать можно. Сейчас пока занят, попозже могу написать.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 10 Mar 2016 15:43:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101765#p101765</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101764#p101764</link>
			<description><![CDATA[<p>Может <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ff468870(v=vs.85).aspx">какое сообщение</a> ответ пришлёт...</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 15:17:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101764#p101764</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101763#p101763</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Можно отслеживать EVENT_SYSTEM_MOVESIZESTART, далее по таймеру определять размер окна вплоть до EVENT_SYSTEM_MOVESIZEEND.<br />Максимизация — отслеживать EVENT_OBJECT_LOCATIONCHANGE и по таймеру проверять, не максимизировано ли.</p></blockquote></div><p>Не подходит, надо определять одномоментно.</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Максимизация — отслеживать EVENT_OBJECT_LOCATIONCHANGE и по таймеру проверять, не максимизировано ли.</p></blockquote></div><p>EVENT_OBJECT_LOCATIONCHANGE сильно грузит процесс и часто вешает его если есть какие то действия в обработчике. Приходит очень много сообщений, и даже если при каждом выставлять короткий таймер, то из за частоты сообщений он может не скоро запустится.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 15:14:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101763#p101763</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101762#p101762</link>
			<description><![CDATA[<p>Можно отслеживать EVENT_SYSTEM_MOVESIZESTART, далее по таймеру определять размер окна вплоть до EVENT_SYSTEM_MOVESIZEEND.<br />Максимизация — отслеживать EVENT_OBJECT_LOCATIONCHANGE и по таймеру проверять, не максимизировано ли.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 10 Mar 2016 15:05:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101762#p101762</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101761#p101761</link>
			<description><![CDATA[<p>Насколько знаю, АНК не может получать оконные сообщения других процессов.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 14:53:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101761#p101761</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101760#p101760</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong>, вот такие сообщения показывает Wispector, когда окно браузера растягиваю. Можно ли этим воспользоваться - не знаю, в оконные сообщения как-то не вникал.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Thu, 10 Mar 2016 14:49:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101760#p101760</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101759#p101759</link>
			<description><![CDATA[<p>Возможно в момент прихода сообщения вызвать что то из API, в WINDOWINFO такого не нашёл...</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 14:24:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101759#p101759</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101758#p101758</link>
			<description><![CDATA[<p>Кстати попутный вопрос раз уже <em>окно растягивается</em>, момент максимизации окна тоже интересен.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 13:48:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101758#p101758</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101757#p101757</link>
			<description><![CDATA[<p>Сообщения посылаются, только известные мне не отличают растягивание от передвижения окна. Есть WM_SIZE или что то подобное, но требуется для стороннего приложения.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 13:46:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101757#p101757</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101756#p101756</link>
			<description><![CDATA[<p>Мне кажется, пользователь не может тянуть за рамку &quot;в данный момент&quot;. Я себе представляю этот процесс как периодическую перерисовку окна, которая происходит при изменении координат курсора, находящегося в режиме &quot;size&quot;.<br />Вероятно при этом посылаются сообщения.<br /><em>WinGetPos</em> - есть такая команда, определяющая размеры окна.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Thu, 10 Mar 2016 13:41:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101756#p101756</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Определить что в данный момент окно растягивается]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=101755#p101755</link>
			<description><![CDATA[<p>Как определить что в данный момент пользователь тянет окно стороннего приложения за рамку, чтобы изменить его размер?</p><p>Вариант с GetKeyState(&quot;LButton&quot;, &quot;P&quot;) или A_Cursor не рассматриваю.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 10 Mar 2016 13:17:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=101755#p101755</guid>
		</item>
	</channel>
</rss>
