<?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="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8161&amp;type=atom" />
	<updated>2013-04-18T11:24:04Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8161</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71528#p71528" />
			<content type="html"><![CDATA[<p>Судя по комментарию по ссылке, работает.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2013-04-18T11:24:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71528#p71528</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71527#p71527" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br /></p><div class="quotebox"><blockquote><p>В будущих версиях Windows:</p></blockquote></div><p>А в &quot;восьмёрке&quot; работает?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-04-18T11:20:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71527#p71527</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71525#p71525" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>с этим могут быть проблемы?</p></blockquote></div><p>В Windows 7 вряд ли, а в XP SP1:<br /><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms644989%28v=vs.85%29.aspx"><strong>RegisterShellHookWindow</strong> function</a><br /></p><div class="quotebox"><cite>MSDN пишет:</cite><blockquote><p>This function was not included in the SDK headers and libraries until Windows XP with Service Pack 1 (SP1) and Windows Server 2003. If you do not have a header file and import library for this function, you can call the function using LoadLibrary and GetProcAddress.</p></blockquote></div><p>В будущих версиях Windows:<br /></p><div class="quotebox"><cite>MSDN пишет:</cite><blockquote><p>This function is not intended for general use. It may be altered or unavailable in subsequent versions of Windows.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-18T10:52:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71525#p71525</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71524#p71524" />
			<content type="html"><![CDATA[<p>Я про то что: правильно ли я адаптировал код? Я же в WinApi совсем не бум-бум <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /><br />И даже до конца не могу понять, что является &quot;WinApi&quot;, а что нет. Увидел ваш код, и методом ненаучного тыка что-то &quot;накатал&quot;.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-04-18T10:35:48Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71524#p71524</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71523#p71523" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>с этим могут быть проблемы?</p></blockquote></div><p>Вы серьёзно? Почему вы считаете этот вопрос уместным?</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2013-04-18T10:30:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71523#p71523</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71522#p71522" />
			<content type="html"><![CDATA[<p>Сделал <a href="http://forum.script-coding.com/viewtopic.php?pid=64273#p64273">на примере кода</a> <strong>creature.ws</strong>. Хотел бы знать, с этим могут быть проблемы?<br /></p><div class="codebox"><pre><code>CoordMode, ToolTip, Screen
DllCall(&quot;RegisterShellHookWindow&quot;, &quot;UInt&quot;, A_ScriptHwnd) 
OnMessage(DllCall(&quot;RegisterWindowMessage&quot;, &quot;str&quot;, &quot;SHELLHOOK&quot;), &quot;ShellProc&quot;) 
OnExit, Exit
Return

ShellProc(nCode, wParam)
{ 
    static A := 1
    If (nCode = 4)
    { 
        WinGet, Process, ProcessName, % !wParam ? &quot;A&quot; : &quot;ahk_id &quot; wParam 
        ToolTip % A++ &quot;`n`n&quot; Process, 15, 15
    }    
} 

Exit:
    DllCall(&quot;DeregisterShellHookWindow&quot;, &quot;UInt&quot;, A_ScriptHwnd)
    ExitApp
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-04-18T09:40:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71522#p71522</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71334#p71334" />
			<content type="html"><![CDATA[<p>У меня иногда срабатывает, иногда нет. Причину не знаю.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-04-13T21:14:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71334#p71334</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71326#p71326" />
			<content type="html"><![CDATA[<p>Использую ваш код, и выяснилось - что если активировать <em>окно</em>, следом активировать меню пуск потом панель задач, и потом снова окно - то сообщение о изменении активного окна (после панели задач) не поступит.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-04-12T16:31:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71326#p71326</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70559#p70559" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Не понял, вы же его использовали <a href="http://forum.script-coding.com/viewtopic.php?pid=47283#p47283">в этом</a> скрипте.</p></blockquote></div><p>Он работает в AHK без написания dll только для событий клавиатуры и мыши.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-03-20T17:57:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70559#p70559</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70558#p70558" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>OnMessage отслеживает только сообщения, посланные своему приложению.</p></blockquote></div><p>Как раз, сам только понял <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="quotebox"><blockquote><p>правильно отслеживать с помощью хука SetWindowsHookEx, но в AHK он не сработает.</p></blockquote></div><p>Не понял, вы же его использовали <a href="http://forum.script-coding.com/viewtopic.php?pid=47283#p47283">в этом</a> скрипте.</p><div class="quotebox"><blockquote><p>Примерно так:</p></blockquote></div><p>Спасибо! Так и знал, что именно вы поможете <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-20T17:50:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70558#p70558</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70557#p70557" />
			<content type="html"><![CDATA[<p>OnMessage отслеживает только сообщения, посланные своему приложению.<br />Смену активного окна, наверное, правильно отслеживать с помощью хука <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx"><strong>SetWindowsHookEx</strong></a>, но в AHK он не сработает.<br />Можно выйти из положения, установив <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd373640%28v=vs.85%29.aspx"><strong>SetWinEventHook</strong></a> и отслеживая событие смены клавиатурного фокуса <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd318066%28v=vs.85%29.aspx#EVENT_OBJECT_FOCUS"><strong>EVENT_OBJECT_FOCUS</strong></a>. Но оно будет происходить даже при получении фокуса разными контролами внутри одного окна, поэтому нужно определять окно верхнего уровня, которому принадлежит контрол. Если его хэндл сменился — произошла смена активного окна.<br />Примерно так:<br /></p><div class="codebox"><pre><code>#Persistent
EVENT_OBJECT_FOCUS := 0x8005
global WS_CHILD := 0x40000000, hPrevActive

WinGet, hPrevActive,, A

HWINEVENTHOOK := SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, 0
                     , RegisterCallback(&quot;WatchingActivateWindow&quot;, &quot;F&quot;), 0, 0, 0)
                     
OnExit, Exit
return

Exit:
   DllCall(&quot;UnhookWinEvent&quot;, Ptr, HWINEVENTHOOK)
   ExitApp
   
WatchingActivateWindow(hWinEventHook, event, hwnd)
{
   h := hwnd
   While !toplevel
   {
      WinGet, Style, Style, ahk_id %h%
      if (Style &amp; WS_CHILD)
         h := DllCall(&quot;GetParent&quot;, Ptr, h, Ptr)
      else
         toplevel := 1
   }
   
   if (h != hPrevActive)
      ToolTip % hPrevActive := h   ; хэндл активного в данный момент окна
}

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)
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2013-03-20T17:34:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70557#p70557</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70556#p70556" />
			<content type="html"><![CDATA[<p>Таймер на 10 мсек... Думаю скрипт с &quot;критическими&quot; функциями будет не оч. стабильно работать.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-20T17:32:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70556#p70556</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70553#p70553" />
			<content type="html"><![CDATA[<p>Можно периодически проверять, которое окно на данный момент является активным.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2013-03-20T17:21:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70553#p70553</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Получать сообщение о активации\деактивации окон в системе]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=70541#p70541" />
			<content type="html"><![CDATA[<p>Господа, подскажите как получать сообщения о активации\деактивации любого окна в системе, в том числе если у самого скрипта нет своего Gui? Наверное это как-то возможно с помощью OnMessage, сам не могу разобратся.<br />И есть ли возможность получать в сообщении какие-то данные об этом окне?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-03-20T01:30:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=70541#p70541</id>
		</entry>
</feed>
