<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=10510</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10510&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF».]]></description>
		<lastBuildDate>Mon, 11 May 2015 08:19:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93888#p93888</link>
			<description><![CDATA[<p>Хм интересно. Я вот разобрался как на подуровни смотреть. вот пример:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;код</div><div class="fancy_spoiler"><div class="codebox"><pre><code>Lwin::
MouseGetPos, , , hWnd
client := Acc_ObjectFromWindow(hWnd)
popup_menu := Acc_GetChild(client, &quot;3,1,1&quot;)

MsgBox % popup_menu.AccName(1)


;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;)
}

Acc_ObjectFromWindow(hWnd, idObject = 0)
{
    Acc_Init()
    If    DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;UInt&quot;, idObject&amp;=0xFFFFFFFF, &quot;Ptr&quot;, -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,&quot;Int64&quot;),&quot;Int64&quot;), &quot;Ptr*&quot;, pacc)=0
    Return    ComObjEnwrap(9,pacc,1)
}

Acc_Children(Acc) {
    if ComObjType(Acc,&quot;Name&quot;) != &quot;IAccessible&quot;
        ErrorLevel := &quot;Invalid IAccessible Object&quot;
    else {
        Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]
        if DllCall(&quot;oleacc\AccessibleChildren&quot;, &quot;Ptr&quot;,ComObjValue(Acc), &quot;Int&quot;,0, &quot;Int&quot;,cChildren, &quot;Ptr&quot;,VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&amp;varChildren, &quot;Int*&quot;,cChildren)=0 {
            Loop %cChildren%
                i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child):
            return Children.MaxIndex()?Children:
        } else
            ErrorLevel := &quot;AccessibleChildren DllCall Failed&quot;
    }
    if Acc_Error()
        throw Exception(ErrorLevel,-1)
}

Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&amp;p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,&quot;{618736e0-3c3d-11cf-810c-00aa00389b71}&quot;), 1)
}

Acc_Error(p=&quot;&quot;) {
    static setting:=0
    return p=&quot;&quot;?setting:setting:=p
}

Acc_GetChild(Acc, path=&quot;&quot;) {
    Loop Parse, path, csv
        Acc := Acc_Children(Acc)[A_LoopField]
    return Acc
}

;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</code></pre></div></div></div><p>В данном примере по нажатию lwin скрипт смотрит на первый элемент первого меню<br />(в блокноте это - Файл &gt; Создать	CTRL+N; В hh.exe это - Файл &gt; Печать...)</p><p>В строке<br /></p><div class="codebox"><pre><code>Acc_GetChild(client, &quot;3,1,1&quot;)</code></pre></div><p> 3,1,1 это путь к меню:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p><span class="postimg"><img src="http://i.imgur.com/lZAJMax.png" alt="http://i.imgur.com/lZAJMax.png" /></span></p></div></div><p>А уже при вызове самого msgbox&#039;а<br /></p><div class="codebox"><pre><code>MsgBox % popup_menu.AccName(1)</code></pre></div><p>&nbsp; 1 значит первый элемент меню.</p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Mon, 11 May 2015 08:19:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93888#p93888</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93885#p93885</link>
			<description><![CDATA[<p>Это не Acc.<br />Acc показывает более полную картину:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;более полная картина.пнг</div><div class="fancy_spoiler"><p><span class="postimg"><img src="https://i.imgur.com/wjHluYI.png" alt="https://i.imgur.com/wjHluYI.png" /></span></p></div></div><p>Внутри выделенного элемента нет полос прокрутки, но если перейти к его родителю - то после него идут полосы прокрутки, и ещё при 2 переходах на уровень вверх тоже есть полосы прокрутки.<br />1 из этих 3 групп, вероятно, и отвечает за нужный нам скроллбар.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sun, 10 May 2015 14:30:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93885#p93885</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93883#p93883</link>
			<description><![CDATA[<p>В hh.exe, Aсс не видит полосу прокрутки, по сути для него полоса и рабочая область одно и тоже:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;курсор на полосе</div><div class="fancy_spoiler"><p>(Что бы увеличить клик по картинке)<a href="http://i.imgur.com/7zqAGwv.jpg"><span class="postimg"><img src="http://i.imgur.com/7zqAGwv.jpg" alt="http://i.imgur.com/7zqAGwv.jpg" /></span></a></p></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;курсор на рабочей области</div><div class="fancy_spoiler"><p>(Что бы увеличить клик по картинке)<a href="http://i.imgur.com/HPur06x.jpg"><span class="postimg"><img src="http://i.imgur.com/HPur06x.jpg" alt="http://i.imgur.com/HPur06x.jpg" /></span></a></p></div></div><p>Но hh.exe работает на движке internet explorer, у него аналогично:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;курсор на полосе</div><div class="fancy_spoiler"><p>(Что бы увеличить клик по картинке)<a href="http://i.imgur.com/cXoxxqi.jpg"><span class="postimg"><img src="http://i.imgur.com/cXoxxqi.jpg" alt="http://i.imgur.com/cXoxxqi.jpg" /></span></a></p></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;курсор на рабочей области</div><div class="fancy_spoiler"><p>(Что бы увеличить клик по картинке)<a href="http://i.imgur.com/VGwJ4JJ.jpg"><span class="postimg"><img src="http://i.imgur.com/VGwJ4JJ.jpg" alt="http://i.imgur.com/VGwJ4JJ.jpg" /></span></a></p></div></div><p>Надо копать в строну ie полосы прокрутки и ее управления через ahk.</p><p>p.s <a href="http://forum.script-coding.com/viewtopic.php?pid=72459#p72459">вот ahkspy</a></p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Sun, 10 May 2015 11:21:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93883#p93883</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93881#p93881</link>
			<description><![CDATA[<p>Неверно выразился в последнем сообщении - hh.exe и mspaint.exe подпадают под две разных категории окон:<br />- в mspaint.exe Acc_ObjectFromPoint().accRole(0) &quot;видит&quot; скроллбары и определяет их роль верно (как 3, т.е. как скроллбар);<br />- в hh.exe Acc_ObjectFromPoint().accRole(0) &quot;не видит&quot; скроллбары и роль определяется не как 3.</p><p>При этом с обеими категориями окон есть беда с кликами:<br />- если использовать ControlClick в неактивное окно по позиции курсора в нём, то клик проходит ПОД скроллбар: в случае с mspaint.exe - если под скроллбаром скрыт кусок полотна, то клик отсылается на полотно (если под скроллом полотна нет, то клик успешно проходит по скроллбару). Аналогично и с hh.exe: клик над скроллбару в левой навигационной части проходит не в скроллбар, а в список под ним (подсвечивает элемент из списка).<br />- если использовать Send то ему требуется активация окна, что убого.</p><p>Сейчас я обновил свой скрипт до версии 0.4: в скрипте используется комбинированный подход: при работе с неактивными окнами там где можно используется подход ControlSend + ControlClick (самый оптимальный), там где это [по крайней мере пока] невозможно (пример: mspaint.exe) - используется подход Send +{LButton} с временной активацией окна. Во всех остальных случаях отправляется просто Send {MButton}.</p><p>В версии 0.5 планирую вернуть преконфигурируемые правила, чтобы можно было в 3 случае дать скрипту указаний при каких условиях следует действовать как в случае 2.</p><p>А ещё если получится ещё успешно пошаманить с ControlClick, то возможно, что в версии 0.6 удастся целиком избежать принудительной активации окон, даже для сложных окон вроде mspaint.exe.</p><p>А ещё можно побольше поиграться с Acc библиотекой и я не уверен, но возможно, что получится избежать составления преконфигурируемых правил по отступам, а составлять их по Acc-навигации: проблема в том, что Acc_ObjectFromPoint().accRole(0) в окнах типа hh.exe определяет у скроллбаров роль не как 3, но есть подозрение, что если пошарить по родительским/дочерним объектам в Acc-дереве объектов, то возможно у кого-то из них есть роль 3 и нам этого знания будет достаточно.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sat, 09 May 2015 23:16:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93881#p93881</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93757#p93757</link>
			<description><![CDATA[<p><strong>yalanne</strong><br />Увы, но это не исправило проблем с hh.exe и mspaint.exe.<br />Есть подозрение, что скроллбары в них или задизэйблены, или скрыты, или к ним применён ещё какой-то стиль/ex-стиль, что они &quot;прозрачны&quot; для AccessibleObjectFromPoint, но непрозрачны для клика.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Thu, 30 Apr 2015 20:31:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93757#p93757</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93744#p93744</link>
			<description><![CDATA[<p><strong>Drugoy</strong>, Скорей всего совместимо. Я не писал функцию <span class="bbu">Acc_ObjectFromPoint</span>, она вырезана <a href="http://www.autohotkey.com/board/topic/77303-acc-library-ahk-l-updated-09272012/">вот тут</a>. Я и не разбирался что внутри&nbsp; этой функции происходит.<br />А строку <br /></p><div class="codebox"><pre><code>(!h &amp;&amp; DllCall(&quot;LoadLibrary&quot;, Str, &quot;oleacc&quot;, Ptr))</code></pre></div><p>Я позаимствовал у <strong>teadrinker</strong>. в <a href="http://forum.script-coding.com/viewtopic.php?pid=93381#p93381">этом сообщении</a></p><p>Хм я нашел более простой вариант:<br /></p><div class="codebox"><pre><code>~Mbutton::
if ( Acc_ObjectFromPoint().accRole(0) ) = 3
sendinput +{Lbutton}
return

Acc_ObjectFromPoint(ByRef _idChild_ = &quot;&quot;, x = &quot;&quot;, y = &quot;&quot;)
{
    static h
   (!h &amp;&amp; DllCall(&quot;LoadLibrary&quot;, Str, &quot;oleacc&quot;, Ptr))
    If    DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;, &quot;Int64&quot;, x==&quot;&quot;||y==&quot;&quot;?0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt:x&amp;0xFFFFFFFF|y&lt;&lt;32, &quot;Ptr*&quot;, pacc, &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,&quot;UInt&quot;)
}</code></pre></div><p>В таком виде соответствует названию<br /></p><div class="codebox"><pre><code>Acc_ObjectFromPoint().accRole(0)</code></pre></div><p>3 это ROLE_SYSTEM_SCROLLBAR<br />В первом варианте через Child проверялась роль у дочерних элементов линии прокрутки.Дочерних элементов у линии прокрутки всего 5<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p><span class="postimg"><img src="http://i.imgur.com/dnzVumf.png" alt="http://i.imgur.com/dnzVumf.png" /></span></p></div></div><p><strong>Esc</strong>,<br /></p><div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>назначать любые другие функции на элементы интерфейса, например, левый клик по статусбару Notepad++, как выделено зелёным на изображении, возвращает вверх документа, посылая СКМ=Shift+HOME, а правый клик, в самый низ, посылая СКМ=Shift+END.</p></blockquote></div><p>Вот так подойдет:<br /></p><div class="codebox"><pre><code>~Lbutton::
if ( Acc_ObjectFromPoint().accRole(0) ) = 23 and winactive(&quot;ahk_exe notepad++.exe&quot;)
send ^{home}
return

~Rbutton::
if ( Acc_ObjectFromPoint().accRole(0) ) = 23 and winactive(&quot;ahk_exe notepad++.exe&quot;)
send ^{end}
return


Acc_ObjectFromPoint(ByRef _idChild_ = &quot;&quot;, x = &quot;&quot;, y = &quot;&quot;)
{
    static h
   (!h &amp;&amp; DllCall(&quot;LoadLibrary&quot;, Str, &quot;oleacc&quot;, Ptr))
    If    DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;, &quot;Int64&quot;, x==&quot;&quot;||y==&quot;&quot;?0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt:x&amp;0xFFFFFFFF|y&lt;&lt;32, &quot;Ptr*&quot;, pacc, &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,&quot;UInt&quot;)
}</code></pre></div><p>только там надо не шифт а контрол нажимать что бы переместится в начало или конец.</p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Thu, 30 Apr 2015 11:28:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93744#p93744</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93742#p93742</link>
			<description><![CDATA[<p><strong>yalanne</strong> а ваш код совместим со всеми версиями ahk (x32_ansi, x32_unicode, x64)? Или только с какими-то конкретными? А то я вижу там &quot;Int64&quot; у вас и т.к. ничего в этом не понимаю - меня это настораживает.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Thu, 30 Apr 2015 10:53:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93742#p93742</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93739#p93739</link>
			<description><![CDATA[<div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><p>не работает&nbsp; mspaint.exe</p></blockquote></div><p>Я немного код изменил теперь работает у меня в паинте и в проводнике.</p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Thu, 30 Apr 2015 10:17:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93739#p93739</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93732#p93732</link>
			<description><![CDATA[<div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>За правую границу окна</p></blockquote></div><p>Правая граница окна != скроллбар <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br /></p><div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>А 0.3 версия не предполагает добавления программ и отступов или я чего-то не понял?</p></blockquote></div><p>Я подумал, что это теперь не нужно, после того как уважаемый тов. yalanne предложил более надёжный способ детектирования скроллбара под курсором. Я потестировал его вчера и вроде всё ок было со всеми окнами кроме Firefox (но там своя настройка же есть, так что я подумал, что это не страшно).<br />Сейчас вот заметил, что этот метод не работает с hh.exe (просмотрщик *.chm файлов) и mspaint.exe, так что возможно придётся использовать комбинированный подход и применять тот или иной метод в зависимости от окна.</p><br /><p>Если ещё удастся как-то отправлять Shift+Click в неактивное окно без его активации - это будет вообще бомба.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Thu, 30 Apr 2015 06:14:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93732#p93732</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93729#p93729</link>
			<description><![CDATA[<div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><p>У одного окна могут быть скроллбары у разных контролов. При этом контролы могут позицией быть независимы друг от друга, поэтому отступы отсчитывать для них было бы не от чего.</p></blockquote></div><p>Ясно, спасибо.<br /></p><div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><p>За правую границу чего? Справа от скроллбара часто фон от основного окна (шириной, например, в 1px), а ещё правей - ещё и виндовая рамка окна (например, стекло от темы оформления Windows Aero). Они - не относятся к скролбару.<br />У меня вроде всегда всё ОК срабатывает, если чего - попробуйте поменять отступы.</p></blockquote></div><p>За правую границу окна, т.е. если курсор прилетает справа и сразу на скроллбар, но я уже выяснил, что проблема не в вашем коде, сторонний софт так же работает.</p><p>А 0.3 версия не предполагает добавления программ и отступов или я чего-то не понял?</p>]]></description>
			<author><![CDATA[null@example.com (Esc)]]></author>
			<pubDate>Wed, 29 Apr 2015 21:22:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93729#p93729</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93722#p93722</link>
			<description><![CDATA[<p><strong>Drugoy</strong>, К сожалению я сломал винду на глухо. А установить новую пока что нет возможности.<br />А на смартфоне не удобно код объяснять.<br />Но попробую:<br /></p><div class="quotebox"><cite>yalanne пишет:</cite><blockquote><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Вот таблица role значений</div><div class="fancy_spoiler"><div class="codebox"><pre><code>ROLE_SYSTEM_TITLEBAR            = 0x00000001
ROLE_SYSTEM_MENUBAR             = 0x00000002
ROLE_SYSTEM_SCROLLBAR           = 0x00000003
ROLE_SYSTEM_GRIP                = 0x00000004
ROLE_SYSTEM_SOUND               = 0x00000005
ROLE_SYSTEM_CURSOR              = 0x00000006
ROLE_SYSTEM_CARET               = 0x00000007
ROLE_SYSTEM_ALERT               = 0x00000008
ROLE_SYSTEM_WINDOW              = 0x00000009
ROLE_SYSTEM_CLIENT              = 0x0000000A
ROLE_SYSTEM_MENUPOPUP           = 0x0000000B
ROLE_SYSTEM_MENUITEM            = 0x0000000C
ROLE_SYSTEM_TOOLTIP             = 0x0000000D
ROLE_SYSTEM_APPLICATION         = 0x0000000E
ROLE_SYSTEM_DOCUMENT            = 0x0000000F
ROLE_SYSTEM_PANE                = 0x00000010
ROLE_SYSTEM_CHART               = 0x00000011
ROLE_SYSTEM_DIALOG              = 0x00000012
ROLE_SYSTEM_BORDER              = 0x00000013
ROLE_SYSTEM_GROUPING            = 0x00000014
ROLE_SYSTEM_SEPARATOR           = 0x00000015
ROLE_SYSTEM_TOOLBAR             = 0x00000016
ROLE_SYSTEM_STATUSBAR           = 0x00000017
ROLE_SYSTEM_TABLE               = 0x00000018
ROLE_SYSTEM_COLUMNHEADER        = 0x00000019
ROLE_SYSTEM_ROWHEADER           = 0x0000001A
ROLE_SYSTEM_COLUMN              = 0x0000001B
ROLE_SYSTEM_ROW                 = 0x0000001C
ROLE_SYSTEM_CELL                = 0x0000001D
ROLE_SYSTEM_LINK                = 0x0000001E
ROLE_SYSTEM_HELPBALLOON         = 0x0000001F
ROLE_SYSTEM_CHARACTER           = 0x00000020
ROLE_SYSTEM_LIST                = 0x00000021
ROLE_SYSTEM_LISTITEM            = 0x00000022
ROLE_SYSTEM_OUTLINE             = 0x00000023
ROLE_SYSTEM_OUTLINEITEM         = 0x00000024
ROLE_SYSTEM_PAGETAB             = 0x00000025
ROLE_SYSTEM_PROPERTYPAGE        = 0x00000026
ROLE_SYSTEM_INDICATOR           = 0x00000027
ROLE_SYSTEM_GRAPHIC             = 0x00000028
ROLE_SYSTEM_STATICTEXT          = 0x00000029
ROLE_SYSTEM_TEXT                = 0x0000002A
ROLE_SYSTEM_PUSHBUTTON          = 0x0000002B
ROLE_SYSTEM_CHECKBUTTON         = 0x0000002C
ROLE_SYSTEM_RADIOBUTTON         = 0x0000002D
ROLE_SYSTEM_COMBOBOX            = 0x0000002E
ROLE_SYSTEM_DROPLIST            = 0x0000002F
ROLE_SYSTEM_PROGRESSBAR         = 0x00000030
ROLE_SYSTEM_DIAL                = 0x00000031
ROLE_SYSTEM_HOTKEYFIELD         = 0x00000032
ROLE_SYSTEM_SLIDER              = 0x00000033
ROLE_SYSTEM_SPINBUTTON          = 0x00000034
ROLE_SYSTEM_DIAGRAM             = 0x00000035
ROLE_SYSTEM_ANIMATION           = 0x00000036
ROLE_SYSTEM_EQUATION            = 0x00000037
ROLE_SYSTEM_BUTTONDROPDOWN      = 0x00000038
ROLE_SYSTEM_BUTTONMENU          = 0x00000039
ROLE_SYSTEM_BUTTONDROPDOWNGRID  = 0x0000003A
ROLE_SYSTEM_WHITESPACE          = 0x0000003B
ROLE_SYSTEM_PAGETABLIST         = 0x0000003C
ROLE_SYSTEM_CLOCK               = 0x0000003D</code></pre></div></div></div><p><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd373608(v=vs.85).aspx">Вот их описание</a></p></blockquote></div><p><strong>Child</strong> Это имя переменной ее имя можно задать самому. С помощью <span class="bbu">Acc_ObjectFromPoint</span> в эту переменную вносится ид элемента который находится под курсором. А затем с помощью <span class="bbu">accRole</span> проверяется роль этого элемента(что он может делать)<br />Например У самого ползунка прокрутки эта роль равна 39 иначе называемая ROLE_SYSTEM_INDICATOR (0x00000027)<br />а у пустой области прокрутки 43 ROLE_SYSTEM_PUSHBUTTON (0x0000002B)<br />То есть если под курсором элемент с ролью 39 или 43 значит это прокрутка.</p><p>static ... можно и не использовать, а просто загружать библиотеку. а насчет выгрузки не знаю.</p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Wed, 29 Apr 2015 13:47:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93722#p93722</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93721#p93721</link>
			<description><![CDATA[<div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>А зачем использовать classNN, а не для всего окна по exe?</p></blockquote></div><p>У одного окна могут быть скроллбары у разных контролов. При этом контролы могут позицией быть независимы друг от друга, поэтому отступы отсчитывать для них было бы не от чего.</p><br /><div class="quotebox"><cite>Esc пишет:</cite><blockquote><p>Мне кажется есть небольшие проблемы, когда уводишь мышь за правую границу он не сразу определяет класс, нужно курсор отвести влево и обратно.</p></blockquote></div><p>За правую границу чего? Справа от скроллбара часто фон от основного окна (шириной, например, в 1px), а ещё правей - ещё и виндовая рамка окна (например, стекло от темы оформления Windows Aero). Они - не относятся к скролбару.<br />У меня вроде всегда всё ОК срабатывает, если чего - попробуйте поменять отступы.</p><p><strong>yalanne</strong><br />Ваш код очень хороший и я утащу его к себе в скрипт <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Только не могли бы вы в образовательных целях ваш код разжать и подробно прокомментировать, пожалуйста? Я вот его не очень понимаю:<br />Как работает &quot;Acc_ObjectFromPoint(Child).accRole(Child)&quot;? Что за Child и откуда он взялся? Судя по тому, что он при вызове функции присутствует дважды - я правильно понимаю, что она рекурсивно вызывает себя сама же уже передавая хэндл на дочерний элемент в качестве аргумента?<br />К чему там &quot;static h&quot; и &quot;!h&quot;, если они нигде не используются?<br />Безопасно ли делать LoadLibrary без последующей её выгрузки?</p><div class="quotebox"><cite>yalanne пишет:</cite><blockquote><p>Проверял в notepad, notepad++. А в проводнике почему то не хочет. Но если в начало добавить строку</p></blockquote></div><p>А у меня работает и в проводнике (w7sp1x64, Aero).</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Wed, 29 Apr 2015 13:12:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93721#p93721</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93684#p93684</link>
			<description><![CDATA[<p>Можно отслеживать полосу прокрутки через Accessibility. Вот что у меня получилось:<br /></p><div class="codebox"><pre><code>~Mbutton::
if Getscroll()
sendinput +{Lbutton}
return

Getscroll(){
Role := Acc_ObjectFromPoint(Child).accRole(Child)
if (Role = 39) or (Role = 43)
return 1
return 0
}

Acc_ObjectFromPoint(ByRef _idChild_ = &quot;&quot;, x = &quot;&quot;, y = &quot;&quot;)
{
    static h
   (!h &amp;&amp; DllCall(&quot;LoadLibrary&quot;, Str, &quot;oleacc&quot;, Ptr))
    If    DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;, &quot;Int64&quot;, x==&quot;&quot;||y==&quot;&quot;?0*DllCall(&quot;GetCursorPos&quot;,&quot;Int64*&quot;,pt)+pt:x&amp;0xFFFFFFFF|y&lt;&lt;32, &quot;Ptr*&quot;, pacc, &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild)=0
    Return    ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,&quot;UInt&quot;)
}</code></pre></div><p>Проверял в notepad, notepad++. А в проводнике почему то не хочет. Но если в начало добавить строку <br /></p><div class="codebox"><pre><code>Mbutton::return</code></pre></div><p>то есть отключить её в системе. при этом условии в проводнике работает.</p>]]></description>
			<author><![CDATA[null@example.com (yalanne)]]></author>
			<pubDate>Tue, 28 Apr 2015 12:51:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93684#p93684</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93665#p93665</link>
			<description><![CDATA[<p><strong>Drugoy</strong><br />Спасибо, пытался просто проверить и подумал эти значения немного о другом, теперь понял. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> А класс просто у меня другая программа определяет по своему как-то. )</p><p>А зачем использовать classNN, а не для всего окна по exe? Мне кажется есть небольшие проблемы, когда уводишь мышь за правую границу он не сразу определяет класс, нужно курсор отвести влево и обратно.</p>]]></description>
			<author><![CDATA[null@example.com (Esc)]]></author>
			<pubDate>Mon, 27 Apr 2015 21:41:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93665#p93665</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Мгновенный переход по скроллбару средней кнопкой мыши, как в FF]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93659#p93659</link>
			<description><![CDATA[<p><strong>Esc</strong><br />Ну, значения отступов вы видимо от балды взяли <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Нет смысла задавать sbvlo равным sbvro, а также sbhto равным sbhbo, ведь тогда разница между ними равна 0, а значит и ширина вертикального/высота горизонтального скроллбара скриптом будет восприниматься равной нулю (в вашем случае на расстоянии в 100 пикселей от правой и нижней границ контрола).<br />А вот почему Scintilla<strong>2</strong>?<br />у меня вот такое работает:<br /></p><div class="codebox"><pre><code>{&quot;exe&quot;: &quot;notepad++.exe&quot;, &quot;ctrl&quot;: &quot;Scintilla1&quot;, &quot;sbvlo&quot;: 20, &quot;sbvro&quot;: 3, &quot;sbhto&quot;: 60, &quot;sbhbo&quot;: 43}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Mon, 27 Apr 2015 19:42:41 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93659#p93659</guid>
		</item>
	</channel>
</rss>
