<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: ControlSend YouTube Floating Window]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14952</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14952&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: ControlSend YouTube Floating Window».]]></description>
		<lastBuildDate>Thu, 05 Sep 2019 11:11:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135948#p135948</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 05 Sep 2019 11:11:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135948#p135948</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135941#p135941</link>
			<description><![CDATA[<p>Ну у тебя сейчас вообще непонятно для чего показывется путь, так как не показано к какому окну он относится.<br />А в целом мне пока непонятно как правильней делать - получать путь от ребенка к родителю, как сейчас, но учитывая возможность присутствия нескольких родительских объектов с нужной позицией, либо через перебирание всех объектов.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 04 Sep 2019 19:08:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135941#p135941</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135940#p135940</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 04 Sep 2019 18:40:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135940#p135940</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135939#p135939</link>
			<description><![CDATA[<p>В общем по моей ссылке на гитхабе была ошибка в функции Acc_ObjectFromWindow.<br />Написал в issue.<br />Что касаемо неверного пути, то по-моему алгоритм, который выбрал автор по его нахождению не совсем верен.<br />Он получает список родительских объектов и сравнивает в цикле позицию каждого&nbsp; с позицией дочернего объекта и если они идентичны, то обрывает цикл и считает, что дочерний объект принадлежит именно этому родительскому объекту.<br />Но существуют ситуации, когда у нескольких родительских объектов может быть такая же позиция, как и у дочернего и тогда уже определить, какому из них принадлежит дочерний можно, наверное, только дойдя до &quot;главного объекта в иерархии&quot; и сравнив свойства объекта полученного из пути со свойствами объекта полученного через&nbsp; Acc_ObjectFromPoint.<br />Либо можно попробовать получать путь перебирая все объекты в окне и сравнивая их свойства с полученным, через Acc_ObjectFromPoint.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Wed, 04 Sep 2019 12:04:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135939#p135939</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135925#p135925</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 02 Sep 2019 00:27:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135925#p135925</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135923#p135923</link>
			<description><![CDATA[<p>У меня этого приложения нет, но в окне &quot;Картинка в картинке&quot; у меня показывает путь. В AhkSpy код из AccViewer, я иногда сталкивался с неправильными путями, но разбираться с этим не охота, тем более что я редко встречал элементы с постоянными путями.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 01 Sep 2019 19:06:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135923#p135923</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135921#p135921</link>
			<description><![CDATA[<p>Флаг хрома дает нам возможность управлять хромом через iaccessible интерфейс, то есть нажимать на элементы страницы, используя accDoDefaultAction.<br />Если мы знаем точный путь кнопки относительно дочернего окна и он не меняется, то мы можем не искать каждый раз кнопку по названию, а выполнять accDoDefaultAction исходя из её пути.<br />Я не знаю меняется у кнопок этого приложения путь или нет, но AhkSpy его просто не показывает. <br />Поэтому я и написал про баг.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 01 Sep 2019 18:11:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135921#p135921</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135920#p135920</link>
			<description><![CDATA[<p>Я знаю, но в топике старая версия, там и этого нет.<br />Так что даёт путь, и флаг хрома?<br />Ты говоришь А не говоря Б, есть мнение что если бы собеседник знал о чём ты, то у него и вопроса бы не было.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 01 Sep 2019 18:06:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135920#p135920</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135919#p135919</link>
			<description><![CDATA[<p>Название перепутал.<br />Я имел в виду твой AhkSpy.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 01 Sep 2019 18:02:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135919#p135919</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135918#p135918</link>
			<description><![CDATA[<p>А где в window spy такой путь? И что с ним дальше делать?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 01 Sep 2019 18:00:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135918#p135918</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135917#p135917</link>
			<description><![CDATA[<p>Пути кнопки воспроизведения или паузы.<br />Запускать хром надо с флагом --force-renderer-accessibility.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 01 Sep 2019 17:40:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135917#p135917</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135916#p135916</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sun, 01 Sep 2019 17:23:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135916#p135916</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135915#p135915</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sun, 01 Sep 2019 12:52:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135915#p135915</guid>
		</item>
		<item>
			<title><![CDATA[AHK: ControlSend YouTube Floating Window]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=135904#p135904</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Fri, 30 Aug 2019 11:19:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=135904#p135904</guid>
		</item>
	</channel>
</rss>
