<?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=9727&amp;type=atom" />
	<updated>2015-01-09T21:57:29Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=9727</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90241#p90241" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />Удивительно конечно, Вы всё-таки смогли это сделать, думал это невозможно. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Спасибо большое.</p><p>В новой версии еще и решена назойливая проблема первого варианта, т.к. я использовал SendInput {LButton}, при быстром наведении он добавочно кликал за пределами панели задач и, например, выделял текст в браузере.</p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-09T21:57:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90241#p90241</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90238#p90238" />
			<content type="html"><![CDATA[<p>Оптимизировано:<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#Persistent  
#NoEnv 
 
hShellTray := WinExist(&quot;ahk_class Shell_TrayWnd ahk_exe explorer.exe&quot;) 
ControlGet, hTaskbar, HWND,, MSTaskListWClass1, % &quot;ahk_id&quot; hShellTray
DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;)
SetTimer, Reload, 1800000

Check:
    If (DllCall(&quot;WindowFromPoint&quot;, &quot;int64&quot;, 0*DllCall(&quot;GetCursorPos&quot;, &quot;Int64*&quot; ,pt) + pt, &quot;Ptr&quot;) != hTaskbar)
        prID := 0
    Else If ((ID := AccNeedInfo(pt, active, several)) &amp;&amp; ID != prID &amp;&amp; (prID := ID)) &amp;&amp; (!active || several)
    {
        BlockInput On
        WinGetPos, wX, wY,,, ahk_id %hTaskbar%
        poi := ((pt &amp; 0xFFFF) - wX) &amp; 0xFFFF | ((pt &gt;&gt; 32) - wY) &amp; 0xFFFF &lt;&lt; 16     
        PostMessage, 0x201, 0x8 | 0x1, poi,, ahk_id %hTaskbar% 
        Sleep 10
        PostMessage, 0x202, 0x8, poi,, ahk_id %hTaskbar%
        Sleep 10
        BlockInput Off
    }
    Else If !ID
        prID := 0
    SetTimer, Check, -20
    Return

AccNeedInfo(pt, byref active, byref several)   {
    If DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;
        , &quot;Int64&quot;, pt, &quot;Ptr*&quot;, pacc
        , &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild) != 0 
        || !(Child := NumGet(varChild,8,&quot;UInt&quot;))
        Return
    Acc := ComObjEnwrap(9, pacc, 1)
    Acc.accLocation(ComObj(0x4003,&amp;x:=0), ComObj(0x4003,&amp;y:=0), 0, 0, Child)    
    active := ((s := Acc.accState(Child)) = 1073741960 || s = 1074790540) ? 1 : 0
    several := Acc.accRole(Child) = 57 ? 1 : 0
    Return NumGet(x,0,&quot;int&quot;) &quot;x&quot; NumGet(y,0,&quot;int&quot;)
}

Reload:
    Reload
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-09T12:21:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90238#p90238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90227#p90227" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Ого, пока не ломается</p></blockquote></div><p>Значит когда</p><div class="quotebox"><blockquote><p>1074790532 (приложение свернуто)</p></blockquote></div><p>всё таки надо кликать.<br /></p><div class="quotebox"><blockquote><p>я хотел, кстати, по этому поводу спросить в теме по OSD, можно ли ее сделать TopMost даже над таскбаром.</p></blockquote></div><p>В той теме.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T23:26:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90227#p90227</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90226#p90226" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br /></p><div class="quotebox"><blockquote><p>Ну так если оно свёрнуто то клик должен быть, и он есть.</p></blockquote></div><p>Но при этом оно и сворачивает, чего быть не должно.</p><div class="quotebox"><blockquote><p>Попробуйте так</p></blockquote></div><p>Ого, пока не ломается, в Tooltip-е задетектил новые коды <strong>1074790408</strong> и <strong>1073741832</strong>, но все работает. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>#SingleInstance Force
#Persistent  
#NoEnv
ListLines Off  
SetBatchLines -1 
 
hShellTray := WinExist(&quot;ahk_class Shell_TrayWnd ahk_exe explorer.exe&quot;) 
ControlGet, hTaskbar, HWND,, MSTaskListWClass1, % &quot;ahk_id&quot; hShellTray
DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;) 
SetTimer, Reload, 1800000
 
MouseGet:
    MouseGetPos, ,  , , hCtrl, 2 
    If (hCtrl != hTaskbar)
        prID := 0
    Else If ((ID := AccChildPos(mX, mY, active)) &amp;&amp; ID != prID &amp;&amp; (prID := ID) &amp;&amp; !active)
    {     
        BlockInput On 
        WinGetPos, wX, wY,,, ahk_id %hTaskbar%
        poi := (mX - wX) &amp; 0xFFFF | ((mY - wY) &amp; 0xFFFF) &lt;&lt; 16    
        PostMessage, 0x201, 0x8 | 0x1, poi,, ahk_id %hTaskbar% 
        Sleep 1
        PostMessage, 0x202, 0x8, poi,, ahk_id %hTaskbar%
        BlockInput Off
    }
    Else If !ID
        prID := 0
    SetTimer, MouseGet, -20
    Return
    
AccChildPos(byref mX, byref mY, byref active)   { 
    If DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;
        , &quot;Int64&quot;, 0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt, &quot;Ptr*&quot;, pacc
        , &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild) != 0  
        Return
    If !(Child := NumGet(varChild,8,&quot;UInt&quot;))
        Return
    Acc := ComObjEnwrap(9, pacc, 1)
    Acc.accLocation(ComObj(0x4003,&amp;x:=0), ComObj(0x4003,&amp;y:=0), 0, 0, Child) 
    mX := pt &amp; 0xFFFF, mY := pt &gt;&gt; 32
    s := Acc.accState(Child)
    ToolTip % s, 1, 1
    active := (s = 1073741960 || s = 1074790540) ? 1 : 0
    Return NumGet(x,0,&quot;int&quot;) &quot;x&quot; NumGet(y,0,&quot;int&quot;)
}

Reload:
    Reload</code></pre></div><div class="quotebox"><blockquote><p>Не понял.</p></blockquote></div><p>Поставьте OSD над панелью задач и кликните по ней, OSD окажется за ней, я хотел, кстати, по этому поводу спросить в теме по OSD, можно ли ее сделать TopMost даже над таскбаром.</p><p>В 7+ Taskbar Tweaker даже есть опция Disable_TopMost.<br /></p><div class="quotebox"><blockquote><p>By default, the taskbar is always on top. This option allows you to change this behavior.</p><p>0 - Always on top (default)<br />1 - Not always on top, but not overlapped by maximized windows<br />2 - Not always on top, and overlapped by maximized windows</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T23:06:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90226#p90226</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90225#p90225" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>я про: запустил браузер и просто свернул, а не закрыл. Да, сворачивает и разворачивает, т.е. все как обычно.</p></blockquote></div><p>Ну так если оно свёрнуто то клик должен быть, и он есть.<br /></p><div class="quotebox"><blockquote><p>Ту все еще интересней</p></blockquote></div><p>Попробуйте так<br /></p><div class="codebox"><pre><code>s := Acc.accState(Child)
ToolTip % s, 1, 1
active := (s = 1073741960 || s = 1074790540) ? 1 : 0</code></pre></div><p>AhkSpy тут для отладки ненужен. После замены приведите здесь полный код.<br /></p><div class="quotebox"><blockquote><p>OSD оказывается за ней, ощущение, что ломает клик по панели задач за иконками.</p></blockquote></div><p>Не понял.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T22:47:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90225#p90225</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90224#p90224" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br /></p><div class="quotebox"><blockquote><p>Вы уверены что окно именно свёрнуто и при этом активно? Если это даже так, то &quot;ненужный&quot; клик ведь разворачивает окно?</p></blockquote></div><p>Не совсем понимаю, что имеется ввиду под <strong>активно</strong>, я про: запустил браузер и просто свернул, а не закрыл. Да, сворачивает и разворачивает, т.е. все как обычно.</p><div class="quotebox"><blockquote><p>Он может сломатся, а потом правильно заработать?</p></blockquote></div><p>Нет, только после перезагрузки вручную.</p><div class="quotebox"><blockquote><p>попробуйте заменить строку</p></blockquote></div><p>Ту все еще интересней, я просто навожу курсор на 4 приложения, т.е. переключаю, и ломается, но уже полностью, т.е. наведением курсора не разворачивается, но не запущенные запускаются. И стоит кликнуть вручную по свернутому, как опять работает. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>В этот раз удалось задетектить причину с помощью OSD, когда происходит поломка, панель задач становится TopMost, т.е. OSD оказывается за ней, ощущение, что ломает клик по панели задач за иконками.</p><p>Ahk Spy показывает 532 у всех окон и свернутых и развернутых, но 540 у окна которое стоит первым за самим Ahk Spy. Ну и 960 когда все работает, но при запущенном Ahk Spy ломается очень быстро.</p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T22:34:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90224#p90224</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90221#p90221" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Да, работает, но свернуто.</p></blockquote></div><p>Вы уверены что окно именно <strong>свёрнуто</strong> и при этом <strong>активно</strong>? Если это даже так, то &quot;ненужный&quot; клик ведь разворачивает окно? <br /></p><div class="quotebox"><blockquote><p>он может так-же сломаться, но позже</p></blockquote></div><p>Он может сломатся, а потом правильно заработать?<br /></p><div class="quotebox"><blockquote><p>Когда работает все правильно, в обоих состояниях код 1073741960.</p></blockquote></div><p>попробуйте заменить строку<br /></p><div class="codebox"><pre><code>active := Acc.accState(Child) = 1073741960 ? 1 : 0</code></pre></div><p>на<br /></p><div class="codebox"><pre><code>s := Acc.accState(Child)
active := (s = 1073741960 || s = 1074790540 || s = 1074790532) ? 1 : 0</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T21:55:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90221#p90221</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90219#p90219" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Приложение развернуто и активно, и при повторном наведении всё же происходит клик?</p></blockquote></div><p>Да, скрипт как-бы ломается после чего-то и начинает вести себя как вчерашний <a href="http://forum.script-coding.com/viewtopic.php?pid=90105#p90105">из 37 поста</a>, т.е. без WinActivate.</p><div class="quotebox"><blockquote><p>В смысле свернуто и активно?</p></blockquote></div><p>Да, работает, но свернуто.</p><div class="quotebox"><blockquote><p>Что значит не повторяется?</p></blockquote></div><p>Имеется ввиду, что скрипт может сломаться от открытия нового приложения, но повторить это не удается, он может так-же сломаться, но позже. Пытался выяснить причину, думал курсор наезжает на промежуток между ярлыками, или попадает в самый низ, но пока не получилось. Когда работает все правильно, в обоих состояниях код <strong>1073741960</strong>.</p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T21:37:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90219#p90219</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90218#p90218" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>1074790540 (приложение развернуто)</p></blockquote></div><p><span class="bbu">Приложение развернуто</span> и активно, и при повторном наведении всё же происходит клик?<br /></p><div class="quotebox"><blockquote><p>1074790532 (приложение свернуто)</p></blockquote></div><p>В смысле свернуто и активно?<br /></p><div class="quotebox"><blockquote><p>Поломка происходила как и простот при вызове приложения кликом, так и при комбинации Win+цифра, но не повторяется</p></blockquote></div><p>Что значит не повторяется?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T20:36:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90218#p90218</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90216#p90216" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />Ок, попробую задетектить.</p><p>Просто, когда не знал про AHK, эти фичи стали откровением. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p><strong>State code до поломки:</strong><br />1073741960<br /><strong>State code после поломки:</strong><br />1074790540 (приложение развернуто)<br />1074790532 (приложение свернуто)</p><p>Поломка происходила как и простот при вызове приложения кликом, так и при комбинации Win+цифра, но не повторяется.</p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T18:20:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90216#p90216</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90215#p90215" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>8.1 x64, происходит без закономерностей</p></blockquote></div><p>У меня 7. Если глюк появится, и начнётся постоянный отказ фичи, то запусти <a href="http://forum.script-coding.com/viewtopic.php?pid=72459#p72459">AhkSpy</a>, и смотри что в AccInfo - State - code, наведя мышь на кнопку.<br /></p><div class="quotebox"><blockquote><p>http://habrahabr.ru/post/174593/</p></blockquote></div><p>Для себя не нашёл ничего нужного.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T18:14:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90215#p90215</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90213#p90213" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />8.1 x64, происходит без закономерностей, т.е. без повторов от того же действия. Нужно потестировать.</p><p><strong>7+ Taskbar Tweaker</strong> это маст хэв твик для панели задач Windows, попробуйте, что называется &quot;палю годноту&quot;. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Можно убрать группировку по ID приложений, можно каждый ярлык настроить отдельно, где показывать label, можно скрыть эскиз, громкость/сворачивание колесом мыши и т.д. Кстати, разработчик русскоговорящий.</p><p><a href="http://habrahabr.ru/post/174593/">http://habrahabr.ru/post/174593/</a><br /><a href="http://rammichael.com/7-taskbar-tweaker">http://rammichael.com/7-taskbar-tweaker</a></p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T18:01:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90213#p90213</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90208#p90208" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Обнаружилась проблема, бывает отваливается эта возможность</p></blockquote></div><p>Ни разу у себя не заметил. У вас винда какая?<br /></p><div class="quotebox"><blockquote><p>Вы пользуетесь 7+ Taskbar Tweaker?</p></blockquote></div><p>А что это?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T17:32:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90208#p90208</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90203#p90203" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br />Огого, ну Вы мастер, и правда работает. О_о Он даже не кликает повторно по уже открытому и окно не мелькает, как в первоначальном варианте. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Обнаружилась проблема, бывает отваливается эта возможность, т.е. опять начинает сворачивать, после перезагрузки скрипта все норм. Надо посмотреть как на практике будет, может перезагрузка каждые 5 мин решит проблему.</p><p>Вы пользуетесь 7+ Taskbar Tweaker?</p>]]></content>
			<author>
				<name><![CDATA[Esc]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=32797</uri>
			</author>
			<updated>2015-01-08T14:47:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90203#p90203</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Активировать приложения на панели задач при наведении курсора.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=90201#p90201" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>приложение по повторному клику сворачивается, в чем как раз смысл WinActivate.</p></blockquote></div><p>Вроде придумал:<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#Persistent  
#NoEnv
ListLines Off  
SetBatchLines -1 
 
hShellTray := WinExist(&quot;ahk_class Shell_TrayWnd ahk_exe explorer.exe&quot;) 
ControlGet, hTaskbar, HWND,, MSTaskListWClass1, % &quot;ahk_id&quot; hShellTray
DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;) 
SetTimer, Reload, 1800000
 
MouseGet:
    MouseGetPos, ,  , , hCtrl, 2 
    If (hCtrl != hTaskbar)
        prID := 0
    Else If ((ID := AccChildPos(mX, mY, active)) &amp;&amp; ID != prID &amp;&amp; (prID := ID) &amp;&amp; !active)
    {     
        BlockInput On 
        WinGetPos, wX, wY,,, ahk_id %hTaskbar%
        poi := (mX - wX) &amp; 0xFFFF | ((mY - wY) &amp; 0xFFFF) &lt;&lt; 16    
        PostMessage, 0x201, 0x8 | 0x1, poi,, ahk_id %hTaskbar% 
        Sleep 1
        PostMessage, 0x202, 0x8, poi,, ahk_id %hTaskbar%
        BlockInput Off
    }
    Else If !ID
        prID := 0
    SetTimer, MouseGet, -20
    Return
    
AccChildPos(byref mX, byref mY, byref active)   { 
    If DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;
        , &quot;Int64&quot;, 0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt, &quot;Ptr*&quot;, pacc
        , &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild) != 0  
        Return
    If !(Child := NumGet(varChild,8,&quot;UInt&quot;))
        Return
    Acc := ComObjEnwrap(9, pacc, 1)
    Acc.accLocation(ComObj(0x4003,&amp;x:=0), ComObj(0x4003,&amp;y:=0), 0, 0, Child) 
    mX := pt &amp; 0xFFFF, mY := pt &gt;&gt; 32
    active := Acc.accState(Child) = 1073741960 ? 1 : 0
    Return NumGet(x,0,&quot;int&quot;) &quot;x&quot; NumGet(y,0,&quot;int&quot;)
}

Reload:
    Reload</code></pre></div><p>Кстати ещё можно определять, одно или несколько окон висит на кнопке, так что вариантов много. Например если одно из нескольких окон кнопки <strong>уже активно</strong>, то посылать ктрл+клик для активации следующего окна (код ниже), или просто клик для вывода списка окон этой кнопки.<br /></p><div class="codebox"><pre><code>
#SingleInstance Force
#Persistent  
#NoEnv
ListLines Off  
SetBatchLines -1 
 
hShellTray := WinExist(&quot;ahk_class Shell_TrayWnd ahk_exe explorer.exe&quot;) 
ControlGet, hTaskbar, HWND,, MSTaskListWClass1, % &quot;ahk_id&quot; hShellTray
DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;) 
SetTimer, Reload, 1800000
 
MouseGet:
    MouseGetPos, ,  , , hCtrl, 2 
    If (hCtrl != hTaskbar)
        prID := 0
    Else If ((ID := AccChildPos(mX, mY, active, several)) &amp;&amp; ID != prID &amp;&amp; (prID := ID)) &amp;&amp; (!active || (active &amp;&amp; several))
    {     
        BlockInput On 
        WinGetPos, wX, wY,,, ahk_id %hTaskbar%
        poi := (mX - wX) &amp; 0xFFFF | ((mY - wY) &amp; 0xFFFF) &lt;&lt; 16     
        PostMessage, 0x201, 0x8 | 0x1, poi,, ahk_id %hTaskbar% 
        Sleep 1
        PostMessage, 0x202, 0x8, poi,, ahk_id %hTaskbar%
        BlockInput Off
    }
    Else If !ID
        prID := 0
    SetTimer, MouseGet, -20
    Return
    
AccChildPos(byref mX, byref mY, byref active, byref several)   { 
    If DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;
        , &quot;Int64&quot;, 0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt, &quot;Ptr*&quot;, pacc
        , &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild) != 0  
        Return
    If !(Child := NumGet(varChild,8,&quot;UInt&quot;))
        Return
    Acc := ComObjEnwrap(9, pacc, 1)
    Acc.accLocation(ComObj(0x4003,&amp;x:=0), ComObj(0x4003,&amp;y:=0), 0, 0, Child) 
    mX := pt &amp; 0xFFFF, mY := pt &gt;&gt; 32
    active := Acc.accState(Child) = 1073741960 ? 1 : 0
    several := Acc.accRole(Child) = 57 ? 1 : 0 
    Return NumGet(x,0,&quot;int&quot;) &quot;x&quot; NumGet(y,0,&quot;int&quot;)
}

Reload:
    Reload
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-01-08T14:12:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=90201#p90201</id>
		</entry>
</feed>
