<?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=11393&amp;type=atom" />
	<updated>2016-03-10T22:44:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11393</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101783#p101783" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2016-03-10T22:44:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101783#p101783</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101769#p101769" />
			<content type="html"><![CDATA[<p>У меня на практике тормозит весь скрипт.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T16:56:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101769#p101769</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101768#p101768" />
			<content type="html"><![CDATA[<p>По моим представлениям, не будет часто выполняться, соответственно грузить, нет? Я пока не проверял.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2016-03-10T16:41:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101768#p101768</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101767#p101767" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ну, можно в его HookProc Sleep вставить.</p></blockquote></div><p>А что это даст?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T16:16:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101767#p101767</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101765#p101765" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2016-03-10T15:43:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101765#p101765</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101764#p101764" />
			<content type="html"><![CDATA[<p>Может <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ff468870(v=vs.85).aspx">какое сообщение</a> ответ пришлёт...</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T15:17:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101764#p101764</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101763#p101763" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T15:14:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101763#p101763</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101762#p101762" />
			<content type="html"><![CDATA[<p>Можно отслеживать EVENT_SYSTEM_MOVESIZESTART, далее по таймеру определять размер окна вплоть до EVENT_SYSTEM_MOVESIZEEND.<br />Максимизация — отслеживать EVENT_OBJECT_LOCATIONCHANGE и по таймеру проверять, не максимизировано ли.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2016-03-10T15:05:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101762#p101762</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101761#p101761" />
			<content type="html"><![CDATA[<p>Насколько знаю, АНК не может получать оконные сообщения других процессов.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T14:53:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101761#p101761</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101760#p101760" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, вот такие сообщения показывает Wispector, когда окно браузера растягиваю. Можно ли этим воспользоваться - не знаю, в оконные сообщения как-то не вникал.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2016-03-10T14:49:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101760#p101760</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101759#p101759" />
			<content type="html"><![CDATA[<p>Возможно в момент прихода сообщения вызвать что то из API, в WINDOWINFO такого не нашёл...</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T14:24:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101759#p101759</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101758#p101758" />
			<content type="html"><![CDATA[<p>Кстати попутный вопрос раз уже <em>окно растягивается</em>, момент максимизации окна тоже интересен.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T13:48:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101758#p101758</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101757#p101757" />
			<content type="html"><![CDATA[<p>Сообщения посылаются, только известные мне не отличают растягивание от передвижения окна. Есть WM_SIZE или что то подобное, но требуется для стороннего приложения.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T13:46:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101757#p101757</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101756#p101756" />
			<content type="html"><![CDATA[<p>Мне кажется, пользователь не может тянуть за рамку &quot;в данный момент&quot;. Я себе представляю этот процесс как периодическую перерисовку окна, которая происходит при изменении координат курсора, находящегося в режиме &quot;size&quot;.<br />Вероятно при этом посылаются сообщения.<br /><em>WinGetPos</em> - есть такая команда, определяющая размеры окна.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2016-03-10T13:41:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101756#p101756</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Определить что в данный момент окно растягивается]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=101755#p101755" />
			<content type="html"><![CDATA[<p>Как определить что в данный момент пользователь тянет окно стороннего приложения за рамку, чтобы изменить его размер?</p><p>Вариант с GetKeyState(&quot;LButton&quot;, &quot;P&quot;) или A_Cursor не рассматриваю.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2016-03-10T13:17:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=101755#p101755</id>
		</entry>
</feed>
