<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=16591</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16591&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Возможно ли определить что текущая вкладка chrome - самая правая?».]]></description>
		<lastBuildDate>Thu, 20 Jul 2023 20:08:54 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158853#p158853</link>
			<description><![CDATA[<p>Да, на ahk v2 <strong>lexikos</strong> этот баг пофиксил.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 20:08:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158853#p158853</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158847#p158847</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 20 Jul 2023 15:50:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158847#p158847</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158842#p158842</link>
			<description><![CDATA[<p>Как я понимаю, для каждого 64 бит процесса Windows, после примерно 32000 окон созданных данным процессом, возвращает хендл окна в виде 0xffffffffhwnd, а автохотки преобразует хендл в строку и не обрезает биты.<br />При этом при использовании внутренних команд ахк с таким хендлом работает нормально (с обрезанным нет), а при вызове dllcall нужно либо отрезать либо передавать как uptr.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 15:12:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158842#p158842</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158841#p158841</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 20 Jul 2023 14:46:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158841#p158841</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158838#p158838</link>
			<description><![CDATA[<p>Я обнаружил данный баг, когда автоматизировал программу, которая во время автоматизации постоянно создавала и уничтожала свои дочерние окна.<br />И в какой-то момент новые окна получали хэндл больше чем uint.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 14:15:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158838#p158838</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158836#p158836</link>
			<description><![CDATA[<p>А разве может быть хэндл окна Хрома больше UInt ? Я так понял, это какая-то внутренняя проблема AHK, когда возвращаются такие хэндлы.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 20 Jul 2023 13:52:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158836#p158836</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158835#p158835</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 13:40:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158835#p158835</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158834#p158834</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>1) Это неправильно:</p></blockquote></div><p>Если имеешь в виду &quot;Ptr&quot; и &quot;uptr&quot;, то вроде без разницы. В DllCall главное правильно указать размерность, а знаковое значение или беззнаковое по идее определит сама winapi-функция.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 20 Jul 2023 13:30:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158834#p158834</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158833#p158833</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 12:43:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158833#p158833</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158832#p158832</link>
			<description><![CDATA[<p><strong>Malcev</strong><br />Ага, спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Gh0sTG0)]]></author>
			<pubDate>Thu, 20 Jul 2023 12:34:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158832#p158832</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158831#p158831</link>
			<description><![CDATA[<p>Скачайте acceexplorer 2 и проанализируйте, что вы получаете этим кодом и что следует заменить.<br /></p><div class="quotebox"><cite>Gh0sTG0 пишет:</cite><blockquote><p>можно ли отсюда как то вынуть id вкладок?</p></blockquote></div><p>Нельзя.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 20 Jul 2023 12:33:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158831#p158831</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=158830#p158830</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Gh0sTG0)]]></author>
			<pubDate>Thu, 20 Jul 2023 12:07:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=158830#p158830</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149591#p149591</link>
			<description><![CDATA[<p><strong>Malcev</strong><br />Запихнул в нулевый файл, действительно работает о__0<br />Пойду разбираться как же так, хн...</p><p>Ок... Почему то этой версии кода надо поспать не меньше 300 после ^w чтобы начать работать... Мб старой версии это тоже помогло бы и она просто цепляла недозакрывшуюся вкладку в число существующих, хз.</p>]]></description>
			<author><![CDATA[null@example.com (Gh0sTG0)]]></author>
			<pubDate>Sat, 18 Sep 2021 21:07:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149591#p149591</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149590#p149590</link>
			<description><![CDATA[<p>Не знаю, что у вас понаписано на 350 строк.<br />У меня мой вариант работает без ошибок.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sat, 18 Sep 2021 21:04:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149590#p149590</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Возможно ли определить что текущая вкладка chrome - самая правая?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=149589#p149589</link>
			<description><![CDATA[<p><strong>Malcev</strong> Первый код продолжает работать, выдавая на 1 вкладку больше. Иногда не выдавая. Решил проблему тем, что мой код IFает на последней и, временами, предпоследней вкладке (2 из 50+ это :смайликпалецвверх:)</p>]]></description>
			<author><![CDATA[null@example.com (Gh0sTG0)]]></author>
			<pubDate>Sat, 18 Sep 2021 20:47:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=149589#p149589</guid>
		</item>
	</channel>
</rss>
