<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6632</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6632&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик».]]></description>
		<lastBuildDate>Mon, 28 May 2012 20:34:24 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60545#p60545</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>У меня тоже не всегда (Win 7).</p></blockquote></div><p>Подтверждаю баг. Пытались коллективно определить его причину - не смогли.<br />Можете попробовать увеличить SetKeyDelay до 50-100.</p><br /><p>Вот другая версия этого же скрипта.<br />В ней можно переключаться между окнами внутри групп окон (если у вас включена группировка схожих задач).<br />Немного кривоватый скрипт, нуждается в множестве мелких доработок, но как основа - прекрасен.</p><div class="codebox"><pre><code>Count=0
SetKeyDelay,20
IsActive() {        
   MouseGetPos, , , id
   return id=WinExist(&quot;ahk_class Shell_TrayWnd&quot;) ? 1 : 0
}
TaskBarPos() {
    WinGetPos,X,Y,W,H,ahk_class Shell_TrayWnd
    return x=0 ? y=0 ? h&lt;w ? &quot;Top&quot; : &quot;Left&quot; : &quot;Bottom&quot; : &quot;Right&quot;
}
#If IsActive()
WheelDown::
WheelUp::
Max := Num()
Count := Count &lt;= 1 ? Max : Count -1
if (Count&lt;=Max&amp;&amp; Count&gt;1)
ControlSend, , % (A_ThisHotkey=&quot;WheelDown&quot; ? TaskBarPos()=&quot;Top&quot; || TaskBarPos()=&quot;Bottom&quot; ? &quot;{Right}&quot; : &quot;{Down}&quot; : TaskBarPos()=&quot;Top&quot; || TaskBarPos()=&quot;Bottom&quot; ? &quot;{Left}&quot; : &quot;{Up}&quot; ) ,ahk_class TaskListThumbnailWnd
else
ControlSend, MSTaskListWClass1, % &quot;{PGND}&quot; (A_ThisHotkey=&quot;WheelDown&quot; ? TaskBarPos()=&quot;Top&quot; || TaskBarPos()=&quot;Bottom&quot; ? &quot;{Right}{Up}&quot; : &quot;{Down}{Left}&quot; : TaskBarPos()=&quot;Top&quot; || TaskBarPos()=&quot;Bottom&quot; ? &quot;{Left}{Up}&quot; : &quot;{Up}{Left}&quot; ) ,ahk_class Shell_TrayWnd
SetTimer, Check, 50
return
#If
Check:
    If !IsActive() {
       ControlSend, , {Enter}, ahk_class TaskListThumbnailWnd
        SetTimer, Check, Off
    }
return
F3::ExitApp
Num() {
  return Acc_ObjectFromWindow(WinExist(&quot;ahk_class TaskListThumbnailWnd&quot;)).accChildCount//3
}
Acc_ObjectFromWindow(hWnd, idObject = -4){
    Static  h
    If Not  h
        h:=DllCall(&quot;LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;,&quot;Ptr&quot;)
    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)
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Mon, 28 May 2012 20:34:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60545#p60545</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60544#p60544</link>
			<description><![CDATA[<div class="quotebox"><cite>Irbis пишет:</cite><blockquote><p>Upd: Не всегда срабатывает переключение - к примеру, активна Опера, колесом выбираю ТС, но при возвращении курсора за пределы таскбара опять активой становится Опера.</p></blockquote></div><p>У меня тоже не всегда (Win 7).</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 28 May 2012 20:22:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60544#p60544</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60543#p60543</link>
			<description><![CDATA[<p>Да, так и задумано. Можно конечно их и в исключения наверно добавить, но у меня там всё равно ничего не прикреплено.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Mon, 28 May 2012 20:05:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60543#p60543</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60527#p60527</link>
			<description><![CDATA[<p>Скрипт в win7 &quot;пролистывает&quot; иконки быстрого запуска, даже если приложение не запущено. То есть, на рисунке видно, что от Оперы до Тотал Коммандера надо сделать 3 поворота колесика, а не одно.<br />Так и задумано? В остальном идея неплоха.<br /><span class="postimg"><img src="http://savepic.su/2077178.jpg" alt="http://savepic.su/2077178.jpg" /></span></p><p>Upd: Не всегда срабатывает переключение - к примеру, активна Опера, колесом выбираю ТС, но при возвращении курсора за пределы таскбара опять активой становится Опера.</p>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Mon, 28 May 2012 09:21:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60527#p60527</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60515#p60515</link>
			<description><![CDATA[<p>Улучшенный скрипт:<br />1. Ему не важна позиция панели задач (слева, справа, снизу, сверху).<br />2. Теперь при выборе группы окон - активирует первое из них, а не виснет на половине процесса, как это было раньше.<br />3. Переключение окон происходит от текущего активного, а не от кнопки &quot;Пуск&quot;.<br />4. Средний клик мышью по окну на панели задач закрывает его нежно (т.е. если имеется несохранённая информация - окно выдаст запрос на подтверждение операции).</p><div class="codebox"><pre><code>; Script to work with Windows Taskbar
; 1. Hover taskbar
; 2. Scroll up/down to pre-select any window or pinned task.
; 3. Move cursor away from taskbar to select the pre-selected window/task.
  
#SingleInstance, Force
SetKeyDelay, 30
  
IsClassUnderMouse(class) {
   MouseGetPos, , , id
   WinGetClass, this_class, ahk_id %id%
   return this_class=class
}
  
#If IsClassUnderMouse(&quot;Shell_TrayWnd&quot;)
  
WheelUp::
   ControlSend, MSTaskListWClass1, % TrayKey(&quot;list&quot;) TrayKey(&quot;previous&quot;) TrayKey(&quot;thumbs&quot;), ahk_class Shell_TrayWnd
   SetTimer, Check, 200
Return
  
WheelDown::
   ControlSend, MSTaskListWClass1, % TrayKey(&quot;list&quot;) TrayKey(&quot;next&quot;) TrayKey(&quot;thumbs&quot;), ahk_class Shell_TrayWnd
   SetTimer, Check, 200
Return
  
MButton::
    WinActivate, ahk_class Shell_TrayWnd
    Click
    WinWaitNotActive, , , 0.5
    If !ErrorLevel
        WinClose, A
return
  
Check:
    If !IsClassUnderMouse(&quot;Shell_TrayWnd&quot;)
    {
        ControlSend, , {Enter}, ahk_class TaskListThumbnailWnd
        SetTimer, , Off
    }
return
  
TrayKey(action) {
    WinGetPos, X, Y, W, H, ahk_class Shell_TrayWnd
    if (action = &quot;next&quot;)
        return (W &gt; H) ? &quot;{Right}&quot; : &quot;{Down}&quot;
    if (action = &quot;previous&quot;)
        return (W &gt; H) ? &quot;{Left}&quot; : &quot;{Up}&quot;
    if (action = &quot;thumbs&quot;)
        return (X = 0 &amp;&amp; Y = 0) ? (W &gt; H ? &quot;{Down}&quot; : &quot;{Right}&quot;) : (X = 0) ? &quot;{Up}&quot; : &quot;{Left}&quot;
    if (action = &quot;list&quot;)
        return (X = 0 &amp;&amp; Y = 0) ? (W &gt; H ? &quot;{Up}&quot; : &quot;{Left}&quot;) : (X = 0) ? &quot;{Down}&quot; : &quot;{Right}&quot;
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sun, 27 May 2012 18:24:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60515#p60515</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60509#p60509</link>
			<description><![CDATA[<p>Кажется, ответы такие:<br />Ответ 1: Он там не нужен, т.к. посылает клик туда, где находится курсор.<br />Ответ 2: потому что посылаемая кнопка отправляется в окно с ahk_class Shell_TrayWnd, а у групп окон ahk_class TaskListThumbnailWnd</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sun, 27 May 2012 16:19:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60509#p60509</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60508#p60508</link>
			<description><![CDATA[<p>Проблема с этим скриптом, что почему-то не выбираются окна из групп окон.<br />Т.е. если открыть несколько окон Проводника - то они на панели задач (ПЗ) объединяться в группу.<br />Допустим, у нас вертикальная ПЗ справа.<br />Без скрипта мы делаем клик по ПЗ, нажимаем Tab, выбираем стрелками вверх/вниз нужное нам окно, прикреплённый ярлык или группу окон и дальше активируем выбранное посыланием Space или Enter для первых двух вариантов, либо двойным посыланием этих же клавишь, в случае группы окон (если хотим выделить хотя бы просто тупо первое из группы, а не выбирать ещё и внутри группы окно).</p><p>В последней части скрипта имеется:<br /></p><div class="codebox"><pre><code>Check:
If !IsClassUnderMouse(&quot;Shell_TrayWnd&quot;) {
ControlSend MSTaskListWClass1, {LButton}{enter}, ahk_class Shell_TrayWnd
SetTimer, Check, Off
} return</code></pre></div><p>Вопрос 1: зачем вообще там сначала посылается {LButton}?<br />Вопрос 2: если {LButton} заменить (или просто добавить после него) на {Left} (который по идее ничего не должен сломать ни для 1 из случаев) - скрипт всё равно не срабатывает на группах окон. Почему?</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sun, 27 May 2012 14:37:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60508#p60508</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55496#p55496</link>
			<description><![CDATA[<p>Огромное вам спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Mon, 09 Jan 2012 20:24:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55496#p55496</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55488#p55488</link>
			<description><![CDATA[<div class="codebox"><pre><code>IsClassUnderMouse(class) {
   MouseGetPos, , , id
   WinGetClass, this_class, ahk_id %id%
   return this_class=class
}

#IF IsClassUnderMouse(&quot;Shell_TrayWnd&quot;)

WheelUp::
   WinGetPos,,, W, H, ahk_class Shell_TrayWnd
   ControlSend, MSTaskListWClass1, % W&gt;H ? &quot;{Right}&quot;:&quot;{Up}&quot;, ahk_class Shell_TrayWnd
   SetTimer, Check, 50
   Return
 
WheelDown::
   WinGetPos,,, W, H, ahk_class Shell_TrayWnd
   ControlSend, MSTaskListWClass1, % W&gt;H ? &quot;{Left}&quot;:&quot;{Down}&quot;, ahk_class Shell_TrayWnd
   SetTimer, Check, 50
   Return

#IF

Check:
If !IsClassUnderMouse(&quot;Shell_TrayWnd&quot;) {
ControlSend MSTaskListWClass1, {LButton}{enter}, ahk_class Shell_TrayWnd
SetTimer, Check, Off
} return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Grey)]]></author>
			<pubDate>Mon, 09 Jan 2012 09:20:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55488#p55488</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55486#p55486</link>
			<description><![CDATA[<p>В таком виде скрипт перестаёт работать должным образом: прокрутка перестаёт переключать окна по порядку, вместо этого она одно и то же выбирает.</p><p>Пробовал и так:</p><div class="codebox"><pre><code>IsClassUnderMouse(class) {
   MouseGetPos, , , id
   WinGetClass, this_class, ahk_id %id%
   return this_class=class
}

#IF IsClassUnderMouse(&quot;Shell_TrayWnd&quot;)

WheelUp::
   WinGetPos,,, W, H, ahk_class Shell_TrayWnd
if W&gt;H
{
ControlSend MSTaskListWClass1, {Up}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return
}
else
{
ControlSend MSTaskListWClass1, {Right}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return
}

WheelDown::
   WinGetPos,,, W, H, ahk_class Shell_TrayWnd
if W&gt;H
{
ControlSend MSTaskListWClass1, {Down}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return
}
else
{
ControlSend MSTaskListWClass1, {Left}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return
}

#IF

Check:
If !IsClassUnderMouse(&quot;Shell_TrayWnd&quot;) {
ControlSend MSTaskListWClass1, {LButton}{enter}, ahk_class Shell_TrayWnd
SetTimer, Check, Off
} return</code></pre></div><p>Тоже перестаёт работать.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Mon, 09 Jan 2012 02:00:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55486#p55486</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55460#p55460</link>
			<description><![CDATA[<p>Ок, спасибо за ваши старания, если получить список окон в прямом порядке с дескрипторами окон - невозможно, то и чёрт с ним.<br />Но помогите, пожалуйста, последнюю мелкую фигню доделать.<br />Я остановился на этом варианте скрипта:<br /></p><div class="codebox"><pre><code>IsClassUnderMouse(class) {
   MouseGetPos, , , id
   WinGetClass, this_class, ahk_id %id%
   return this_class=class
}

#IF IsClassUnderMouse(&quot;Shell_TrayWnd&quot;)

WheelUp::
ControlSend MSTaskListWClass1, {Up}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return

WheelDown::
ControlSend MSTaskListWClass1, {Down}, ahk_class Shell_TrayWnd
SetTimer, Check, 50
return

#IF

Check:
If !IsClassUnderMouse(&quot;Shell_TrayWnd&quot;) {
ControlSend MSTaskListWClass1, {LButton}{enter}, ahk_class Shell_TrayWnd
SetTimer, Check, Off
} return</code></pre></div><p>Но он настроен под вертикальный таскбар, для горизонтального вместо Up надо посылать Right, а вместо Down - Left.<br />Хотелось бы авто-определения позиции таскбара:<br />мне думается, что это проще всего сделать добавив WinGetPos Shell_TrayWnd определив его width и height, а затем сравнив их: если height больше width - то таскбар вертикален, если наоборот - то горизонтален.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sun, 08 Jan 2012 16:31:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55460#p55460</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55454#p55454</link>
			<description><![CDATA[<div class="codebox"><pre><code>#SingleInstance, Force
CoordMode, Mouse
VarSetCapacity(IID, 16)
NumPut(0x11CF3C3D618736E0, IID, 0, &quot;Int64&quot;)
NumPut(0x719B3800AA000C81, IID, 8, &quot;Int64&quot;)
DllCall(&quot;kernel32\LoadLibrary&quot;,&quot;Str&quot;,&quot;oleacc&quot;)
ControlGet, hWnd, Hwnd,, MSTaskListWClass1, ahk_class Shell_TrayWnd
ControlGet, hWnd2, Hwnd,,, ahk_class Button
ppTaskList:=COM_AccessibleObjectFromWindow(hWnd)
TaskList:=ComObjEnwrap(ppTaskList)
TCount:=GetSelection()
#If MouseIsOver()

MButton::
   If % WinID=hWnd2
      PostMessage, 0x10,,,, ahk_class Progman
   Else
      WinClose, % &quot;ahk_id&quot;GetTaskInfo()
   Return
WheelUp::SelectStuff(1)
WheelDown::SelectStuff(0)

GetSelection()
{
   global
   Loop, % TaskList.accChildCount
   {
      TaskList.accLocation(ComObjParameter(0x4003, &amp;L:=0)
                         , ComObjParameter(0x4003, &amp;T:=0)
                         , ComObjParameter(0x4003, &amp;W:=0)
                         , ComObjParameter(0x4003, &amp;H:=0)
                         , A_Index)
      If L=0 And T=0 And W=0 And H=0
         Continue
      If TaskList.accState(A_Index)=0x40000000
         Continue
      If TaskList.accState(A_Index)&amp;8
         Return, A_Index
   }
}

MouseIsOver()
{
   global
   MouseGetPos, XPos, YPos, WinID, WinControl
   WinGetClass, WinClass, % &quot;ahk_id&quot;WinID
   Return, % WinClass=&quot;Shell_TrayWnd&quot;
         And WinControl=&quot;MSTaskListWClass1&quot;
          Or WinID=hWnd2 ? True:False
}

GetTaskInfo()
{
   global
   TWinID:=
   Loop, % TaskList.accChildCount
   {
      TWinTitle:=TaskList.accName(A_Index)
      TaskList.accLocation(ComObjParameter(0x4003, &amp;L:=0)
                         , ComObjParameter(0x4003, &amp;T:=0)
                         , ComObjParameter(0x4003, &amp;W:=0)
                         , ComObjParameter(0x4003, &amp;H:=0)
                         , A_Index)
      If L=0 And T=0 And W=0 And H=0
         Continue
      TWinID:=
      WinGet, TWinID, ID, % TWinTitle
      WinGetPos, TWinX, TWinY, TWinW, TWinH, % &quot;ahk_id&quot;TWinID
      TIconLEFTAbs:=NumGet(L), TIconTOPAbs:=NumGet(T)
      TIconWidth:=NumGet(W), TIconHeight:=NumGet(H)
      If RContains(TIconLEFTAbs, TIconTOPAbs
                  , TIconWidth, TIconHeight
                  , XPos, YPos)
         Break
      Else
         TWinID:=
   }
   Return, TWinID
}

SelectStuff(Dir)
{
   global
   If (TCount=2 And Dir=1)
   Or (TCount=TaskList.accChildCount And Dir=0)
   {
      TrayTip,, % &quot;достигнут &quot;
   . (Dir=1 ? &quot;верхний&quot;:&quot;нижний&quot;)
           . &quot; край списка икон&quot;
      Return
   }
   Sleep, 300
   If Dir=0
      TCount++
   Else
      TCount--
   If TCount&gt;TaskList.accChildCount
      TCount:=TaskList.accChildCount
   If TCount&lt;2
      TCount:=2
   State:=TaskList.accState(TCount)
   TaskList.accLocation(ComObjParameter(0x4003, &amp;L:=0)
                      , ComObjParameter(0x4003, &amp;T:=0)
                      , ComObjParameter(0x4003, &amp;W:=0)
                      , ComObjParameter(0x4003, &amp;H:=0)
                      , TCount)
   If !L And !T And !W And !H
   {
      If Dir=0
         TCount++
      Else
         TCount--
      If TCount&gt;TaskList.accChildCount
         TCount:=TaskList.accChildCount
      Else If TCount&lt;2
         TCount:=2
   }
   acc_Select(ppTaskList, TCount, 3)
   TaskList.accDoDefaultAction(TCount)
}

COM_AccessibleObjectFromWindow(Hwnd)
{
   global
   DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, &quot;Ptr&quot;, Hwnd
                                              , &quot;UInt&quot;, -4
                                              , &quot;Ptr&quot;, &amp;IID
                                              , &quot;Ptr*&quot;, ppValueObject)
   Return, ppValueObject
}

acc_Select(pacc, idChild=0, nFlags=3)
{
   Return, DllCall(NumGet(NumGet(1*pacc)+84), &quot;UInt&quot;, pacc
                                            , &quot;Int&quot;, nFlags
                                            , &quot;Int64&quot;, 3
                                            , &quot;Int64&quot;, idChild)
}

RContains(X, Y, W, H, CX, CY)
{
   Return, ((((X&lt;=CX) And (CX&lt;(X+W))) And (Y&lt;=CY)) AND (CY&lt;(Y+H)))
}</code></pre></div><p>Скрипт корректно не работает с группированными окнами.</p><p>P.S.: Вы меня извините, но далее я эту тему разрабатывать не буду.</p>]]></description>
			<author><![CDATA[null@example.com (Grey)]]></author>
			<pubDate>Sun, 08 Jan 2012 15:42:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55454#p55454</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55336#p55336</link>
			<description><![CDATA[<p><strong>Grey</strong>,<br />спасибо большое за ваше участие! Опубликованные коды - очень ценны, но у меня возникло 2 вопроса:<br />1. Я правильно понимаю, что в первом коде нельзя вызывать окна не по их титулу, а по присвоенному индексу? т.е. нельзя ли в скрипте установить попарные связи между индексом и титулом окна?<br />Я так понял, что нет, но хочу услышать это от вас.<br />2. а нельзя ли совместить 2 метода?<br />Ну то есть создать 2 списка: из первого взять порядок расположения окон, и вызывать по названию окон, но делать проверку: если вызываемое название окна в списке встречается не единократно, то обратиться ко второму списку (где у нас окна с дескрипторами прописаны) в котором сделать выборку записей на основе вызываемого названия окна. Выборка даст опять-таки несколько результатов, но зато каждый из этих результатов можно будет вызвать уже по дескриптору.<br />Умно?</p><br /><p>Вот иллюстрация задуманного:<br />Допустим, что у нас есть несколько окон, где повторяющимся будет &quot;калькулятор&quot; (у которого название для всех окон одинаковое, но в конце я добавил 1, 2 и 3, чтобы их отличить):<br />Список 1 (столбцы: Index и Title)<br /></p><div class="codebox"><pre><code>1. миранда
2. фаерфокс
3. ноутпад
4. гуглхром
5. калькулятор1
6. калькулятор2
7. калькулятор3</code></pre></div><p>Список 2 (столбцы: Handle и Title)<br /></p><div class="codebox"><pre><code>0x10188 гуглхром
0x1304a2 калькулятор3
0х230c0c миранда
0x427709 фаерфокс
0x43020c калькулятор1
0xb0138 ноутпад
0xc0c3c калькулятор2</code></pre></div><p>Каков будет порядок переключения окон, если мы захотим проскроллить весь список по кругу, начиная с окна ноутпада:<br />1. ноутпад (вызов по титулу, т.к. совпадений с другими записями нет).<br />2. гуглхром (вызов по титулу, т.к. совпадений с другими записями нет).<br />3. калькулятор (вызов по титулу не производится, т.к. есть ещё 2 совпадения. Вместо этого обращаемся ко 2-ому списку, где просто вызываем 1-ый по списку калькулятор, если список упорядочить по Handle. В нашем случае это будет &quot;0x1304a2 калькулятор3&quot;)<br />4. калькулятор (вызов по титулу не производится, т.к. есть ещё 2 совпадения. Вместо этого обращаемся ко 2-ому списку, где просто вызываем 2-ой по списку калькулятор, если список упорядочить по Handle. В нашем случае это будет &quot;0x43020c калькулятор1&quot;)<br />5. калькулятор (вызов по титулу не производится, т.к. есть ещё 2 совпадения. Вместо этого обращаемся ко 2-ому списку, где просто вызываем 3-ий по списку калькулятор, если список упорядочить по Handle. В нашем случае это будет &quot;0xc0c3c калькулятор2&quot;)<br />6. миранда (вызов по титулу, т.к. совпадений с другими записями нет).<br />7. фаерфокс (вызов по титулу, т.к. совпадений с другими записями нет).</p><p>У меня в винде стоит настройка таскбара &quot;группировать кнопки панели задач&quot;, так что для меня переключение между тремя калькуляторами будет выглядеть довольно органично, хоть и порядок их переключения будет 3-1-2 вместо 1-2-3.<br />Но если снять галку группировки кнопок, то такой порядок переключения окон будет выглядеть, конечно, более дико.</p><p>Или может в 1-ый скрипт можно окнам с одинаковым титулом приписывать невидимые символы, чтобы отличать одно окно от другого?</p><p>Пожалуйста, не сдавайтесь! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Fri, 06 Jan 2012 03:07:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55336#p55336</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55335#p55335</link>
			<description><![CDATA[<p>Получаю по средству COM Interface список икон на панели задач: </p><div class="codebox"><pre><code>#NoTrayIcon
VarSetCapacity(IID, 16)
NumPut(0x11CF3C3D618736E0, IID, 0, &quot;Int64&quot;)
NumPut(0x719B3800AA000C81, IID, 8, &quot;Int64&quot;)
DllCall(&quot;kernel32\LoadLibrary&quot;, &quot;Str&quot;, &quot;Oleacc&quot;)
ControlGet, hWnd, Hwnd,, MSTaskListWClass1, ahk_class Shell_TrayWnd
taskList:=COM_AccessibleObjectFromWindow(hWnd)
Hotkey, Space, RedrawList
Gui, +AlwaysOnTop +ToolWindow
Gui, Add, ListView, r14 w450, Index|Title
RedrawList:
LV_Delete()
Loop, % taskList.accChildCount
  LV_Add(&quot;&quot;, A_Index, taskList.accName(A_Index))
Gui, Show,, % (!taskList.accChildCount ? &quot;Nothing was found!&quot;
: (&quot;Found: &quot;taskList.accChildCount &quot; window&quot;
. (taskList.accChildCount&gt;1 ? &quot;s&quot;:&quot;  &quot;)))&quot;                     &quot;
. &quot;                        Space: refresh, F5: reload, Esc: exit&quot;
Return

COM_AccessibleObjectFromWindow(Hwnd)
{
   global
   DllCall(&quot;Oleacc\AccessibleObjectFromWindow&quot;, &quot;Ptr&quot;, Hwnd
                                              , &quot;UInt&quot;, -4
                                              , &quot;Ptr&quot;, &amp;IID
                                              , &quot;Ptr*&quot;, ppvObject)
   Return, ComObjEnwrap(ppvObject)
}

F5::Reload
Esc::
GuiClose:
   ExitApp</code></pre></div><p>Вроде всё в порядке, все полученные названия икон приложений располагаются в списке согласно порядку, в каком они располагаются на панели задач, не взирая, на то, что каждое приложение в списке представлено двумя строками записи, можно пробовать активировать окно по его названию, пропуская строку которая похожа на название процесса, но!, опять-таки к примеру, если имеется два/три/много запущенных экземпляров того же Notepad, или Calculator (первый запущенный экземпляр которого в отличии от блокнота/любого другого приложения имеет две строки с одинаковым названием)?, на лицо проблема в виде не возможности получения дескрипторов окон (лично хотел-бы спросить у Стива Балмера, почему отсуствуют эти самые дескрипторы <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />). Можно получить список приложений другим путём, с дескрипторами, но в том списке не будет порядка соответствующего расположению икон приложений на панели задач: </p><div class="codebox"><pre><code>;DetectHiddenWindows, On
#NoTrayIcon
Gui, +AlwaysOnTop -MinimizeBox +ToolWindow HwndGUIhWnd
Gui, Add, ListView, w450 h259, Index|Handle        |Title
ArrayID:=[]
WinGet, ListID, List,,, Running Applications
Loop, % ListID
{
   IDs:=ListID%A_Index%
   WinGetTitle, WinTitle, % &quot;ahk_id&quot;IDs
   If !WinTitle
   {
      Counter++
      Continue
   }
   ArrayID.Insert(IDs)
}
Gui, Show,, % (!ListID ? &quot;Nothing was found!&quot;
: (&quot;Found all: &quot;ListID &quot; window&quot;(ListID&gt;1 ? &quot;s&quot;:&quot;  &quot;)))
. &quot;, with title: &quot;ListID-Counter &quot;                &quot;
. &quot;                           F5: reload, Esc: exit&quot;
For Key, Value In ArrayID
{
   WinGetTitle, WinTitle, % &quot;ahk_id&quot;Value
   LV_Add(&quot;&quot;, Key, Value, WinTitle)
}
Return

F5::Reload
Esc::
GuiClose:
   ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Grey)]]></author>
			<pubDate>Thu, 05 Jan 2012 23:57:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55335#p55335</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: переключение окон скроллом над таскбаром, закрытие через мидлклик]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=55299#p55299</link>
			<description><![CDATA[<p>На офф. форуме АНК тоже никто с этим помочь не смог.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Wed, 04 Jan 2012 23:41:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=55299#p55299</guid>
		</item>
	</channel>
</rss>
