<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: ControlSend YouTube Floating Window]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14952&amp;type=atom" />
	<updated>2019-09-05T11:11:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14952</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135948#p135948" />
			<content type="html"><![CDATA[<p>В общем посмотрел я какая может быть иерархия iaccessible в разных окнах и понял, что от ребенка к родителю путь будет находиться не всегда - например в хроме, если объект расположен в контроле Chrome_RenderWidgetHostHWND, то на первые 5 уровней можно выйти только добавляя их к полученному пути (они постоянны).<br />А с некоторых дочерних элементов по данному алгоритму вообще не выйти на родительский (может быть из-за каких-то хитросплетений отображения DOM в броузере), хотя через Acc_ObjectFromWindow можно. <br />Пример - справка автохотки через фаерфокс 69, win10.<br />Если по этой ссылке <a href="https://www.autohotkey.com/docs/AutoHotkey.htm">https://www.autohotkey.com/docs/AutoHotkey.htm</a> попытаться получить родительский объект для объекта &quot;1.1.30.03&quot;, то мы через через Acc_WindowFromObject(Parent:=Acc_Parent(Acc)) сразу получим хендл родительского окна равный пустоте.<br />Также в некоторых окнах на дочерний объект можно выйти только с дочерних окон, а в некоторых и с дочерних нельзя.<br />К тому же есть ситуации, что относительно дочернего окна путь будет постоянен, а относительно главного нет.<br />Исходя из этого можно сделать вывод, что для того, чтобы получить реальную пользу от пути, нужно получать путь до нужного объекта и от дочернего окна и от главного через Acc_ObjectFromWindow и отображать эти пути вместе с выводом хендлов этих окон.<br />Так что мои предположения о том, что от AccViewer.ahk пользы никакой, а только путанница - верны.<br />Если хочешь, то можешь модернизировать этот скрипт и вставить его в AhkSpy:<br /><a href="https://www.autohotkey.com/boards/viewtopic.php?f=6&amp;t=40615">https://www.autohotkey.com/boards/viewt … mp;t=40615</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-05T11:11:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135948#p135948</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135941#p135941" />
			<content type="html"><![CDATA[<p>Ну у тебя сейчас вообще непонятно для чего показывется путь, так как не показано к какому окну он относится.<br />А в целом мне пока непонятно как правильней делать - получать путь от ребенка к родителю, как сейчас, но учитывая возможность присутствия нескольких родительских объектов с нужной позицией, либо через перебирание всех объектов.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-04T19:08:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135941#p135941</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135940#p135940" />
			<content type="html"><![CDATA[<p>У меня сейчас так выглядит, сможешь поправить?<br /></p><div class="codebox"><pre><code>
DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;oleacc&quot;, &quot;Ptr&quot;)
CoordMode, Mouse, Screen

1::
	MouseGetPos, mx, my
	If DllCall(&quot;oleacc\AccessibleObjectFromPoint&quot;
		, &quot;Int64&quot;, mx&amp;0xFFFFFFFF|my&lt;&lt;32, &quot;Ptr*&quot;, pacc
		, &quot;Ptr&quot;, VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&amp;varChild) = 0
	Acc := ComObjEnwrap(9,pacc,1), child := NumGet(varChild,8,&quot;UInt&quot;)
	If !IsObject(Acc)
		Return
	ToolTip % GetAccPath(Acc, child)
	Return
		

GetAccPath(Acc, child) {
	path := Acc_GetPath(Acc)
	if path !=
		Return child ? path &quot;,&quot; child : path
	Else
		Return &quot;object not found&quot;
}

Acc_GetPath(Acc) {
	hwnd := Acc_WindowFromObject(Acc)
	WinObj := Acc_ObjectFromWindow(hwnd)
	WinObjPos := Acc_Location(WinObj)
	While Acc_WindowFromObject(Parent := Acc_Parent(Acc)) = hwnd {
		t2 := GetEnumIndex(Acc) &quot;,&quot; t2
		if Acc_Location(Parent) = WinObjPos
			return SubStr(t2, 1, -1)
		Acc := Parent
	}
	While Acc_WindowFromObject(Parent := Acc_Parent(WinObj)) = hwnd
		t1 .= &quot;P.&quot;, WinObj := Parent
	return t1 SubStr(t2, 1, -1)
}
 
GetEnumIndex(Acc, ChildId=0) {
	if Not ChildId {
		ChildPos := Acc_Location(Acc)
		For Each, child in Acc_Children(Acc_Parent(Acc))
			if IsObject(child) and Acc_Location(child) = ChildPos
				return A_Index
	}
	else {
		ChildPos := Acc_Location(Acc,ChildId)
		For Each, child in Acc_Children(Acc)
			if Not IsObject(child) and Acc_Location(Acc,child) = ChildPos
				return A_Index
	}
}
 
Acc_ObjectFromWindow(hWnd, idObject = 0) {
	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_WindowFromObject(pacc) {
	If DllCall(&quot;oleacc\WindowFromAccessibleObject&quot;, &quot;Ptr&quot;, IsObject(pacc)?ComObjValue(pacc):pacc, &quot;Ptr*&quot;, hWnd)=0
		Return	hWnd
}
Acc_Location(Acc, ChildId=0) {
	try Acc.accLocation(ComObj(0x4003,&amp;x:=0), ComObj(0x4003,&amp;y:=0), ComObj(0x4003,&amp;w:=0), ComObj(0x4003,&amp;h:=0), ChildId)
	return &quot;x&quot; (x:=NumGet(x,0,&quot;int&quot;)) &quot; y&quot; (y:=NumGet(y,0,&quot;int&quot;)) &quot; w&quot; (w:=NumGet(w,0,&quot;int&quot;)) &quot; h&quot; (h:=NumGet(h,0,&quot;int&quot;))
}
Acc_Parent(Acc) {
	try parent:=Acc.accParent
	return parent?Acc_Query(parent):
}
Acc_Children(Acc) {
	if ComObjType(Acc,&quot;Name&quot;)!=&quot;IAccessible&quot;
		return
	else {
		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)=3?child:Acc_Query(child)), ObjRelease(child)
		return Children
		}
	}
}
Acc_Query(Acc) {
	try return ComObj(9, ComObjQuery(Acc,&quot;{618736e0-3c3d-11cf-810c-00aa00389b71}&quot;), 1)
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-09-04T18:40:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135940#p135940</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135939#p135939" />
			<content type="html"><![CDATA[<p>В общем по моей ссылке на гитхабе была ошибка в функции Acc_ObjectFromWindow.<br />Написал в issue.<br />Что касаемо неверного пути, то по-моему алгоритм, который выбрал автор по его нахождению не совсем верен.<br />Он получает список родительских объектов и сравнивает в цикле позицию каждого&nbsp; с позицией дочернего объекта и если они идентичны, то обрывает цикл и считает, что дочерний объект принадлежит именно этому родительскому объекту.<br />Но существуют ситуации, когда у нескольких родительских объектов может быть такая же позиция, как и у дочернего и тогда уже определить, какому из них принадлежит дочерний можно, наверное, только дойдя до &quot;главного объекта в иерархии&quot; и сравнив свойства объекта полученного из пути со свойствами объекта полученного через&nbsp; Acc_ObjectFromPoint.<br />Либо можно попробовать получать путь перебирая все объекты в окне и сравнивая их свойства с полученным, через Acc_ObjectFromPoint.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-04T12:04:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135939#p135939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135925#p135925" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>но в окне &quot;Картинка в картинке&quot; у меня показывает путь</p></blockquote></div><p>Ну и как его использовать, если он неверный?<br />Сравни с результатом у AccViewer.ahk.<br /><a href="https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/DevTools/AccViewer.ahk">https://github.com/Drugoy/Autohotkey-sc … Viewer.ahk</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-02T00:27:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135925#p135925</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135923#p135923" />
			<content type="html"><![CDATA[<p>У меня этого приложения нет, но в окне &quot;Картинка в картинке&quot; у меня показывает путь. В AhkSpy код из AccViewer, я иногда сталкивался с неправильными путями, но разбираться с этим не охота, тем более что я редко встречал элементы с постоянными путями.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-09-01T19:06:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135923#p135923</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135921#p135921" />
			<content type="html"><![CDATA[<p>Флаг хрома дает нам возможность управлять хромом через iaccessible интерфейс, то есть нажимать на элементы страницы, используя accDoDefaultAction.<br />Если мы знаем точный путь кнопки относительно дочернего окна и он не меняется, то мы можем не искать каждый раз кнопку по названию, а выполнять accDoDefaultAction исходя из её пути.<br />Я не знаю меняется у кнопок этого приложения путь или нет, но AhkSpy его просто не показывает. <br />Поэтому я и написал про баг.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-01T18:11:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135921#p135921</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135920#p135920" />
			<content type="html"><![CDATA[<p>Я знаю, но в топике старая версия, там и этого нет.<br />Так что даёт путь, и флаг хрома?<br />Ты говоришь А не говоря Б, есть мнение что если бы собеседник знал о чём ты, то у него и вопроса бы не было.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-09-01T18:06:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135920#p135920</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135919#p135919" />
			<content type="html"><![CDATA[<p>Название перепутал.<br />Я имел в виду твой AhkSpy.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-01T18:02:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135919#p135919</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135918#p135918" />
			<content type="html"><![CDATA[<p>А где в window spy такой путь? И что с ним дальше делать?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-09-01T18:00:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135918#p135918</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135917#p135917" />
			<content type="html"><![CDATA[<p>Пути кнопки воспроизведения или паузы.<br />Запускать хром надо с флагом --force-renderer-accessibility.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-01T17:40:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135917#p135917</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135916#p135916" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>либо через iaccessible</p></blockquote></div><p>А что им делать?<br /></p><div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>баги с определением пути</p></blockquote></div><p>Какого пути?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-09-01T17:23:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135916#p135916</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135915#p135915" />
			<content type="html"><![CDATA[<p>Либо активируйте окно перед этим либо через iaccessible.<br />Кстати, что window spy, что AccViewer имеют баги с определением пути.<br />Лучше использовать AccExplorer от MSDN:<br /><a href="https://github.com/blackrosezy/gui-inspect-tool/blob/master/AccExplorer32.exe">https://github.com/blackrosezy/gui-insp … orer32.exe</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-09-01T12:52:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135915#p135915</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: ControlSend YouTube Floating Window]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=135904#p135904" />
			<content type="html"><![CDATA[<p>Подскажите, пожалуйста, как отправить нажатие в попап окно, открытого с помощью <a href="https://chrome.google.com/webstore/detail/floating-for-youtube-exte/egncdnniomonjgpjbapalkckojhkfddk">Floating Video</a>. У меня не получилось.</p><div class="codebox"><pre><code>5::
ControlSend, , {Space}, ahk_class Chrome_WidgetWin_1 </code></pre></div><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="https://i.imgur.com/53zBWm6.png" alt="https://i.imgur.com/53zBWm6.png" /></span></p></div></div>]]></content>
			<author>
				<name><![CDATA[becauseim]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33149</uri>
			</author>
			<updated>2019-08-30T11:19:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=135904#p135904</id>
		</entry>
</feed>
