<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16591&amp;type=atom" />
	<updated>2023-07-20T20:08:54Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=16591</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158853#p158853" />
			<content type="html"><![CDATA[<p>Да, на ahk v2 <strong>lexikos</strong> этот баг пофиксил.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T20:08:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158853#p158853</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158847#p158847" />
			<content type="html"><![CDATA[<p>Ясно, похоже, так и есть. Но на AHK v2 вроде проблема отсутствует:<br /></p><div class="codebox"><pre><code>#Requires AutoHotkey v2

Loop {
    ToolTip A_Index
    wnd := Gui()
    if InStr(Format(&#039;{:#x}&#039;, wnd.hwnd), &#039;0xffffffff&#039;) {
        MsgBox Format(&#039;{:#x}&#039;, wnd.hwnd)
    }
    wnd.Destroy()
}</code></pre></div><p>В случае с Хромом вряд ли это имеет значение, поскольку маловероятно, что у его процесса создано больше 32000 окон. Но в общем случае, конечно, не помешает знать.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2023-07-20T15:50:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158847#p158847</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158842#p158842" />
			<content type="html"><![CDATA[<p>Как я понимаю, для каждого 64 бит процесса Windows, после примерно 32000 окон созданных данным процессом, возвращает хендл окна в виде 0xffffffffhwnd, а автохотки преобразует хендл в строку и не обрезает биты.<br />При этом при использовании внутренних команд ахк с таким хендлом работает нормально (с обрезанным нет), а при вызове dllcall нужно либо отрезать либо передавать как uptr.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T15:12:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158842#p158842</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158841#p158841" />
			<content type="html"><![CDATA[<p>Не совсем понятно, где баг, в программе, или в AHK при получении хэндла. Так-то они <a href="https://learn.microsoft.com/en-us/windows/win32/winprog64/interprocess-communication?redirectedfrom=MSDN#:~:text=64%2Dbit%20versions%20of%20Windows%20use%2032%2Dbit%20handles%20for%20interoperability.">должны быть</a> 32 битными.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2023-07-20T14:46:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158841#p158841</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158838#p158838" />
			<content type="html"><![CDATA[<p>Я обнаружил данный баг, когда автоматизировал программу, которая во время автоматизации постоянно создавала и уничтожала свои дочерние окна.<br />И в какой-то момент новые окна получали хэндл больше чем uint.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T14:15:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158838#p158838</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158836#p158836" />
			<content type="html"><![CDATA[<p>А разве может быть хэндл окна Хрома больше UInt ? Я так понял, это какая-то внутренняя проблема AHK, когда возвращаются такие хэндлы.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2023-07-20T13:52:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158836#p158836</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158835#p158835" />
			<content type="html"><![CDATA[<p>Будет разница:<br /><a href="https://www.autohotkey.com/boards/viewtopic.php?f=14&amp;t=89745">https://www.autohotkey.com/boards/viewt … mp;t=89745</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T13:40:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158835#p158835</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158834#p158834" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>1) Это неправильно:</p></blockquote></div><p>Если имеешь в виду &quot;Ptr&quot; и &quot;uptr&quot;, то вроде без разницы. В DllCall главное правильно указать размерность, а знаковое значение или беззнаковое по идее определит сама winapi-функция.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2023-07-20T13:30:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158834#p158834</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158833#p158833" />
			<content type="html"><![CDATA[<p>Ну и в коде 2 ошибки.<br />1) Это неправильно:<br /></p><div class="codebox"><pre><code>if DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;UInt&quot;, idObject, &quot;Ptr&quot;, &amp;IID, &quot;PtrP&quot;, pAcc) = 0</code></pre></div><p>Надо так:<br /></p><div class="codebox"><pre><code>if DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, &quot;uptr&quot;, hWnd, &quot;UInt&quot;, idObject, &quot;Ptr&quot;, &amp;IID, &quot;PtrP&quot;, pAcc) = 0</code></pre></div><p>2) Это неправильно:<br /></p><div class="codebox"><pre><code>ChromeAccObj := GetAccObjFromChrome( WinExist(&quot;ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe&quot;) )</code></pre></div><p>Надо так:<br /></p><div class="codebox"><pre><code>ChromeAccObj := GetAccObjFromChrome( WinExist(&quot;ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe&quot;, &quot;Chrome Legacy Window&quot;) )</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T12:43:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158833#p158833</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158832#p158832" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong><br />Ага, спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Gh0sTG0]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39523</uri>
			</author>
			<updated>2023-07-20T12:34:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158832#p158832</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158831#p158831" />
			<content type="html"><![CDATA[<p>Скачайте acceexplorer 2 и проанализируйте, что вы получаете этим кодом и что следует заменить.<br /></p><div class="quotebox"><cite>Gh0sTG0 пишет:</cite><blockquote><p>можно ли отсюда как то вынуть id вкладок?</p></blockquote></div><p>Нельзя.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2023-07-20T12:33:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158831#p158831</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=158830#p158830" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong> Добрый день.<br />Почему то оно не работает?<br />В хроме чего то изменилось?</p><p>Мой код (весь тестовый файл, у меня открыто одно окно хрома не от админа, в нем с десяток вкладок):<br /></p><div class="codebox"><pre><code>
F2::
{
	ROLE_SYSTEM_PAGETABLIST := 0x0000003c
	STATE_SYSTEM_SELECTED   := 0x00000002

	ChromeAccObj := GetAccObjFromChrome( WinExist(&quot;ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe&quot;) )
	AccTabList := SearchElement(ChromeAccObj, {Role: ROLE_SYSTEM_PAGETABLIST})
	AccTabs := AccTabList.accChild(1)
	tabsCount := activeTabNumber := 0
	Loop % AccTabs.accChildCount()
	{
	   if (AccTabs.accChild(A_Index).accRole(0) = 37)   ; ROLE_SYSTEM_PAGETAB
	   {
	      if (activeTabNumber = 0) and (AccTabs.accChild(A_Index).accState(0) &amp; STATE_SYSTEM_SELECTED)
	         activeTabNumber := A_Index
	      tabsCount++
	   }
	}
	MsgBox, % &quot;Всего вкладок: &quot;    . tabsCount . &quot;`n&quot;
	        . &quot;Активная вкладка: &quot; . activeTabNumber
	Return
}

GetAccObjFromChrome(hWnd) {
   static WM_GETOBJECT := 0x3D, AccArray := []
   if !AccArray[hWnd] {
      try SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hWnd%
      if !AccChrome := AccObjectFromWindow(hWnd)
         throw &quot;Failed to get accessible object from hWnd &quot; . Format(&quot;{:#x}&quot;, hWnd)
      AccArray[hWnd] := AccChrome
   }
   Return AccArray[hWnd]
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := &quot;{00020400-0000-0000-C000-000000000046}&quot;
        , IID_IAccessible := &quot;{618736E0-3C3D-11CF-810C-00AA00389B71}&quot;
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;oleacc&quot;, &quot;Ptr&quot;)
        
   VarSetCapacity(IID, 16), idObject &amp;= 0xFFFFFFFF, AccObject := 0
   DllCall(&quot;ole32\CLSIDFromString&quot;, &quot;Str&quot;, idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, &quot;Ptr&quot;, &amp;IID)
   if DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, &quot;Ptr&quot;, hWnd, &quot;UInt&quot;, idObject, &quot;Ptr&quot;, &amp;IID, &quot;PtrP&quot;, pAcc) = 0
      AccObject := ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
   Return AccObject
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: &quot;5&quot;}
   found := true
   for k, v in params {
      try {
         if (k = &quot;State&quot;)
            (!(parentElement.accState(0)    &amp; v) &amp;&amp; found := false)
         else if (k ~= &quot;^(Name|Value)$&quot;)
            (!(parentElement[&quot;acc&quot; . k](0) ~= v) &amp;&amp; found := false)
         else if (k = &quot;ChildCount&quot;)
            (parentElement[&quot;acc&quot; . k]      != v  &amp;&amp; found := false)
         else
            (parentElement[&quot;acc&quot; . k](0)   != v  &amp;&amp; found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccChildren(Acc) {
   if ComObjType(Acc, &quot;Name&quot;) != &quot;IAccessible&quot; {
      ErrorLevel := &quot;Invalid IAccessible Object&quot;
      Return
   }
   try childCount := Acc.accChildCount
   if !childCount
      Return
   Children := []
   VarSetCapacity(varChildren, childCount*(8 + A_PtrSize*2), 0)
   res := DllCall(&quot;oleacc\AccessibleChildren&quot;, &quot;Ptr&quot;, ComObjValue(Acc), &quot;Int&quot;, 0
                                             , &quot;Int&quot;, childCount, &quot;Ptr&quot;, &amp;varChildren, &quot;IntP&quot;, childCount)
   if (res != 0) {
      ErrorLevel := &quot;winapi AccessibleChildren failed&quot;
      Return
   }
   Loop % childCount  {
      offset := (A_Index - 1)*(A_PtrSize*2 + 8)
      _child := NumGet(varChildren, offset + 8)
      if NumGet(varChildren, offset) != (VT_DISPATCH := 9)
         child := _child
      else
         child := AccQuery(_child), ObjRelease(_child)
      Children.Push(child)
   }
   Return Children
}

AccQuery(Acc) {
   static IAccessible := &quot;{618736e0-3c3d-11cf-810c-00aa00389b71}&quot;, VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}
</code></pre></div><p>При нажатии F2 стабильно выдает &quot;всего вкладок 0, активная вкладка 0&quot;, пробовал запускать скрипт и от админа, и без.</p><p>PS и можно ли отсюда как то вынуть id вкладок?</p>]]></content>
			<author>
				<name><![CDATA[Gh0sTG0]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39523</uri>
			</author>
			<updated>2023-07-20T12:07:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=158830#p158830</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149591#p149591" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong><br />Запихнул в нулевый файл, действительно работает о__0<br />Пойду разбираться как же так, хн...</p><p>Ок... Почему то этой версии кода надо поспать не меньше 300 после ^w чтобы начать работать... Мб старой версии это тоже помогло бы и она просто цепляла недозакрывшуюся вкладку в число существующих, хз.</p>]]></content>
			<author>
				<name><![CDATA[Gh0sTG0]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39523</uri>
			</author>
			<updated>2021-09-18T21:07:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149591#p149591</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149590#p149590" />
			<content type="html"><![CDATA[<p>Не знаю, что у вас понаписано на 350 строк.<br />У меня мой вариант работает без ошибок.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2021-09-18T21:04:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149590#p149590</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149589#p149589" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong> Первый код продолжает работать, выдавая на 1 вкладку больше. Иногда не выдавая. Решил проблему тем, что мой код IFает на последней и, временами, предпоследней вкладке (2 из 50+ это :смайликпалецвверх:)</p>]]></content>
			<author>
				<name><![CDATA[Gh0sTG0]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39523</uri>
			</author>
			<updated>2021-09-18T20:47:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149589#p149589</id>
		</entry>
</feed>
