<?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>http://forum.script-coding.com/viewtopic.php?id=10480</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10480&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK:  Трей: определить процесс, иконка которого находится под мышью».]]></description>
		<lastBuildDate>Mon, 06 Apr 2015 21:44:15 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93066#p93066</link>
			<description><![CDATA[<p>Более интересный пример. Создаём своё меню для иконок трея и <em>NotifyIconOverflowWindow</em>. Меню показывается по Ctrl + RButton над иконкой.<br /></p><div class="codebox"><pre><code>#NoEnv
SetBatchLines, -1
Return

Esc:: ExitApp

#If oResult := IsMouseOverTray()
^RButton Up::ShowMyMenu(oResult), oResult := &quot;&quot;

ShowMyMenu(oMousePosInfo)
{
   oIconInfo := GetTrayIconInfoFromPos(oMousePosInfo)
   
   Icon  := Func(&quot;GetIcon&quot;).Bind(oIconInfo)
   Show  := Func(&quot;ShowInfo&quot;).Bind(oIconInfo)
   Open  := Func(&quot;OpenFolder&quot;).Bind(oIconInfo)
   Close := Func(&quot;CloseProcess&quot;).Bind(oIconInfo)
   
   Menu, MyMenu, UseErrorLevel
   Menu, MyMenu, DeleteAll
   Menu, MyMenu, Add, Завершить процесс, % Close
   Menu, MyMenu, Add, Показать иконку в своём окне, % Icon
   Menu, MyMenu, Add, Показать информацию, % Show
   Menu, MyMenu, Add, Открыть папку, % Open
   Menu, MyMenu, Show
}
   
GetTrayIconInfoFromPos(oMousePosInfo)
{
   static WM_USER := 0x400, TB_BUTTONCOUNT := WM_USER + 24, TB_GETBUTTON := WM_USER + 23, TB_GETITEMRECT := WM_USER + 29
      , PtrSize := A_Is64bitOS ? 8 : 4, SizeOfTBBUTTON := 8 + PtrSize*3, SizeOfTRAYDATA := 16 + PtrSize*2, SizeOfiString := 256
   
   WinExist(&quot;ahk_id&quot; oMousePosInfo.hToolbar)
   WinGet, PID, PID
   
   if !IsObject(RemoteBuff := New RemoteBuffer(PID, SizeOfTBBUTTON))
      Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось создать удалённый буфер`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
   
   WinGetPos, xTB, yTB
   POINT := (oMousePosInfo.X - xTB) | (oMousePosInfo.Y - yTB) &lt;&lt; 32
   
   SendMessage, TB_BUTTONCOUNT
   Loop % ErrorLevel  {
      SendMessage, TB_GETITEMRECT, A_Index - 1, RemoteBuff.ptr
      RemoteBuff.Read(RECT, 16)
      if !DllCall(&quot;PtInRect&quot;, Ptr, &amp;RECT, Int64, POINT)
         continue
   
      SendMessage, TB_GETBUTTON, A_Index - 1, RemoteBuff.ptr
      RemoteBuff.Read(TBBUTTON, SizeOfTBBUTTON)
      TraydataOffset := NumGet(&amp;TBBUTTON + 8 + PtrSize) - RemoteBuff.ptr
      TooltipOffset := NumGet(&amp;TBBUTTON + 8 + PtrSize*2) - RemoteBuff.ptr
      RemoteBuff.Read(TRAYDATA, SizeOfTRAYDATA, TraydataOffset)
      RemoteBuff.Read(String, SizeOfiString, TooltipOffset)
      
      Tooltip := StrGet(&amp;String, &quot;UTF-16&quot;)
      hWnd    := NumGet(TRAYDATA, PtrSize = 4 ? &quot;UInt&quot; : &quot;UInt64&quot;)
      uID     := NumGet(TRAYDATA, PtrSize, &quot;UInt&quot;)
      nMsg    := NumGet(TRAYDATA, PtrSize + 4, &quot;UInt&quot;)
      hIcon   := NumGet(TRAYDATA, PtrSize + 16, PtrSize = 4 ? &quot;UInt&quot; : &quot;UInt64&quot;)
      
      DHW_Prev := A_DetectHiddenWindows
      DetectHiddenWindows, On
      WinExist(&quot;ahk_id&quot; hWnd)
      WinGet, Name, ProcessName
      WinGet, ProcessPath, ProcessPath
      WinGet, PID, PID
      DetectHiddenWindows, %DHW_Prev%
      
      Return { ProcessName: Name, PID: PID, ProcessPath: ProcessPath, hWnd: Format(&quot;{:#x}&quot;, hWnd), idx: A_Index - 1
             , CommandLine: ComObjGet(&quot;winmgmts:&quot;).Get(&quot;Win32_Process.Handle=&quot; . PID).CommandLine, hTB: oMousePosInfo.hToolbar
             , Tooltip: Tooltip, ID: Format(&quot;{:#x}&quot;, uID), Msg: Format(&quot;{:#x}&quot;, nMsg), hIcon: Format(&quot;{:#x}&quot;, hIcon) }
   }
}

IsMouseOverTray()
{
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd, hControl, 2
   WinGetClass, Class, ahk_id %hWnd%
   
   if Class not in NotifyIconOverflowWindow,Shell_TrayWnd
      Return
   
   if (Class = &quot;NotifyIconOverflowWindow&quot;)
      ControlGet, hToolbar, hwnd,, ToolbarWindow321, ahk_id %hWnd%
   else  {
      for k, v in [&quot;TrayNotifyWnd&quot;, &quot;SysPager&quot;, &quot;ToolbarWindow32&quot;]
         hToolbar := DllCall(&quot;FindWindowEx&quot;, Ptr, k = 1 ? hWnd : hToolbar, Ptr, 0, Str, v, UInt, 0, Ptr)
      if (hToolbar != hControl)
         Return
   }
   Return {hToolbar: hToolbar, X: X, Y: Y}
}

Class RemoteBuffer
{
   __New(PID, size)
   {
      static PROCESS_VM_OPERATION := 0x8, PROCESS_VM_WRITE := 0x20, PROCESS_VM_READ := 0x10
         , MEM_COMMIT := 0x1000, PAGE_READWRITE := 0x4
         
      if !(this.hProc := DllCall(&quot;OpenProcess&quot;, UInt, PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, Int, 0, UInt, PID, Ptr))
         Return
      
      if !(this.ptr := DllCall(&quot;VirtualAllocEx&quot;, Ptr, this.hProc, UInt, 0, Ptr, size, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr))
         Return, &quot;&quot;, DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   __Delete()
   {
      DllCall(&quot;VirtualFreeEx&quot;, Ptr, this.hProc, Ptr, this.ptr, UInt, 0, UInt, MEM_RELEASE := 0x8000)
      DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   Read(ByRef LocalBuff, size, offset = 0)
   {
      VarSetCapacity(LocalBuff, size, 0)
      if !DllCall(&quot;ReadProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &amp;LocalBuff, Ptr, size, Ptr, 0)
         Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось прочитать данные`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
      Return 1
   }
}

CloseProcess(oInfo)
{
   DHW_Prev := A_DetectHiddenWindows
   DetectHiddenWindows, On
   WinExist(&quot;ahk_id&quot; oInfo.hWnd)
   WinClose
   WinWaitClose,,, 2
   close := !ErrorLevel
   DetectHiddenWindows, % DHW_Prev
   if close
      Return
   
   MsgBox, 4,, % &quot;Не удалось корректно завершить процесс &quot; oInfo.ProcessName &quot;. Убить его?&quot;
   IfMsgBox, No
      Return
   
   Process, Close, % oInfo.PID
   Process, WaitClose, % oInfo.PID, 2
   if ErrorLevel  {
      MsgBox, % &quot;Не удалось завершить процесс &quot; oInfo.ProcessName
      Return
   }
   SendMessage, TB_DELETEBUTTON := 0x416, oInfo.idx,,, % &quot;ahk_id&quot; oInfo.hTB
   SendMessage, WM_SETTINGCHANGE := 0x1A,,,, % &quot;ahk_id&quot; oInfo.hTB
}

ShowInfo(oInfo)
{
   for k, v in [&quot;PID&quot;, &quot;ProcessName&quot;, &quot;ProcessPath&quot;, &quot;CommandLine&quot;, &quot;Msg&quot;, &quot;ID&quot;, &quot;hWnd&quot;, &quot;hIcon&quot;, &quot;ToolTip&quot;]
      list .= v &quot; = &quot; oInfo[v] &quot;`r`n&quot;
   Run, notepad.exe,,, PID
   WinWait, ahk_pid %PID%
   SendMessage, WM_SETICON := 0x80, ICON_SMALL := 0, oInfo.hIcon   ; иконка в строку заголовка окна
   
   if script := RegExMatch(oInfo.CommandLine, &quot;i)\.exe.*\.ahk&quot;)
      ScriptName := RegExReplace(oInfo.CommandLine, &quot;i)(*UCP).*\W(\w+\.ahk).*&quot;, &quot;$1&quot;)
   title := script ? ScriptName : oInfo.ProcessName
   SendMessage, WM_SETTEXT := 0xC,, &amp;title
   ControlSetText, Edit1, % Trim(list, &quot;`r`n&quot;)
}

OpenFolder(oInfo)
{
   if !RegExMatch(oInfo.CommandLine, &quot;i)\.exe.*\.ahk&quot;)
      FilePath := oInfo.ProcessPath
   else  {
      if !FileExist(FilePath := RegExReplace(oInfo.CommandLine, &quot;i).*([a-z]:\\.*\.ahk).*&quot;, &quot;$1&quot;))  {
         MsgBox, 4,, Папка скрипта не найдена. Открыть папку исполнимого файла?
         IfMsgBox, Yes
            FilePath := oInfo.ProcessPath
         else
            FilePath := &quot;&quot;
      }
   }
   if FilePath
      Run, % &quot;Explorer /select`, &quot;&quot;&quot; . FilePath . &quot;&quot;&quot;&quot;
}

GetIcon(oInfo)
{
   static WM_SETICON := 0x80, ICON_SMALL := 0, SS_ICON := 0x3, STM_SETIMAGE := 0x172, IMAGE_ICON := 1
   
   Gui, MyGui:New, +LastFound -DPIScale
   Gui, Add, Pic, x80 y40 w32 h32 %SS_ICON%
   
   hIcon := oInfo.hIcon
   SendMessage, WM_SETICON, ICON_SMALL, hIcon   ; иконка в строку заголовка окна
   PostMessage, STM_SETIMAGE, IMAGE_ICON, hIcon, Static1  ; иконка в контрол Picture
   
   WinGetPos, X, Y,,, % &quot;ahk_id&quot; oInfo.hTB
   Gui, Show, % &quot;w192 h112 x&quot; X &quot; y&quot; Y - 160, Tray Icon
}

MyGuiClose()
{
   Gui, MyGui:Destroy
}</code></pre></div><p>Можно также создавать разные меню для каждой иконки, ориентируясь на её ProcessName.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 06 Apr 2015 21:44:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93066#p93066</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93049#p93049</link>
			<description><![CDATA[<p>Спасибо, отредактировано.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 06 Apr 2015 06:26:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93049#p93049</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=93047#p93047</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Заметил в коде в Коллекции:<br /></p><div class="codebox"><pre><code>
&quot;VirtualAllocEx&quot;, UInt, this.hProc, UInt, 0, UInt, size
</code></pre></div><p>Первый параметр хэндл, т.е. Ptr. Третий — тип SIZE_T, тоже Ptr.</p><div class="codebox"><pre><code>
&quot;ReadProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &amp;LocalBuff, UInt, size, UInt, 0
</code></pre></div><p>Два последних параметра — тип SIZE_T, т.е. Ptr.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 06 Apr 2015 05:04:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=93047#p93047</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92450#p92450</link>
			<description><![CDATA[<p>- Если не секрет<br />- Секрета нет, но не уверен, одобрят ли тут мои странности. <br />Меня всегда раздражало, что реакция иконок не стандартизирована: одни отзываются на одинарный щелчок, другие - на двойной. Тем более, сложно объяснить это странное поведение другому человеку. Решил делать двойной клик по иконкам, его требующим - скриптом. Для этого достаточно определять соответствие &quot;иконка-имя процесса&quot;. Теперь у меня все иконки - однокликовые.</p>]]></description>
			<author><![CDATA[null@example.com (k2)]]></author>
			<pubDate>Tue, 10 Mar 2015 16:43:54 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92450#p92450</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92447#p92447</link>
			<description><![CDATA[<p>Обновись.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 10 Mar 2015 14:38:03 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92447#p92447</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92446#p92446</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Информация по Ctrl + RButton над иконкой трея:</p></blockquote></div><div class="codebox"><pre><code>Call to nonexist function:    
Format(&quot;0x{:X}&quot;, hWnd)
            , CommandLine: ComObjGet(&quot;winmgmts:&quot;).Get(&quot;Win32_Process.Handle=&quot; . PID).CommandLine, Tooltip: Tooltip}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 10 Mar 2015 14:35:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92446#p92446</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92435#p92435</link>
			<description><![CDATA[<div class="quotebox"><cite>k2 пишет:</cite><blockquote><p>Мне для моей задачи хватило определения <em>имени</em> процесса</p></blockquote></div><p>Если не секрет, что Вы будете делать с этим скриптом?</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Tue, 10 Mar 2015 06:26:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92435#p92435</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92433#p92433</link>
			<description><![CDATA[<p>Большое спасибо за новые варианты. Мне для моей задачи хватило определения <em>имени</em> процесса (по подсказкам), но последние варианты, конечно, отвечают именно на поставленный вопрос.</p>]]></description>
			<author><![CDATA[null@example.com (k2)]]></author>
			<pubDate>Tue, 10 Mar 2015 04:35:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92433#p92433</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92430#p92430</link>
			<description><![CDATA[<p>Информация по Ctrl + RButton над иконкой трея:<br /></p><div class="codebox"><pre><code>^RButton::   ; Ctrl + RButton
   if !oTrayIconInfo := GetTrayIconInfoFromMousePos()  {
      MsgBox, Не удалось получить информацию!
      Return
   }

   MsgBox, % &quot;PID = &quot;         oTrayIconInfo.PID
         . &quot;`nProcessName = &quot; oTrayIconInfo.ProcessName
         . &quot;`nProcessPath = &quot; oTrayIconInfo.ProcessPath
         . &quot;`nCommandLine = &quot; oTrayIconInfo.CommandLine
         . &quot;`nhWnd = &quot;        oTrayIconInfo.hWnd
         . &quot;`nTooltip = &quot;     oTrayIconInfo.Tooltip
   Return
   
Esc:: ExitApp

GetTrayIconInfoFromMousePos()
{
/*
Недокументированная структура TRAYDATA
typedef TRAYDATA
{
IntPtr hwnd;
uint uID;
uint uCallbackMessage;
uint Reserved;
uint Reserved2;
IntPtr hIcon;
}
*/
   static WM_USER := 0x400, TB_BUTTONCOUNT := WM_USER + 24, TB_GETBUTTON := WM_USER + 23, TB_GETITEMRECT := WM_USER + 29
      , PtrSize := A_Is64bitOS ? 8 : 4, SizeOfTBBUTTON := 8 + PtrSize*3, SizeOfTRAYDATA := 16 + PtrSize*2, SizeOfiString := 256
      
   if !hToolbar := ControlMousePos(XM, YM)
      Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Курсор не над треем&quot;, Str, &quot;&quot;, UInt, 0)
   
   WinExist(&quot;ahk_id&quot; hToolbar)
   WinGet, PID, PID
   
   if !IsObject(RemoteBuff := New RemoteBuffer(PID, SizeOfTBBUTTON))
      Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось создать удалённый буфер`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
   
   WinGetPos, xTB, yTB
   POINT := (XM - xTB) | (YM - yTB) &lt;&lt; 32
   
   SendMessage, TB_BUTTONCOUNT
   Loop % ErrorLevel  {
      SendMessage, TB_GETITEMRECT, A_Index - 1, RemoteBuff.ptr
      RemoteBuff.Read(RECT, 16)
      if !DllCall(&quot;PtInRect&quot;, Ptr, &amp;RECT, Int64, POINT)
         continue
   
      SendMessage, TB_GETBUTTON, A_Index - 1, RemoteBuff.ptr
      RemoteBuff.Read(TBBUTTON, SizeOfTBBUTTON)
      
      DHW_Prev := A_DetectHiddenWindows
      DetectHiddenWindows, On
      TraydataOffset := NumGet(&amp;TBBUTTON + 8 + PtrSize) - RemoteBuff.ptr
      TooltipOffset := NumGet(&amp;TBBUTTON + 8 + PtrSize*2) - RemoteBuff.ptr
      RemoteBuff.Read(TRAYDATA, SizeOfTRAYDATA, TraydataOffset), WinExist(&quot;ahk_id&quot; hWnd := NumGet(&amp;TRAYDATA))
      RemoteBuff.Read(String, SizeOfiString, TooltipOffset), Tooltip := StrGet(&amp;String, &quot;UTF-16&quot;)
      WinGet, Name, ProcessName
      WinGet, ProcessPath, ProcessPath
      WinGet, PID, PID
      DetectHiddenWindows, %DHW_Prev%
      
      Return {ProcessName: Name, PID: PID, ProcessPath: ProcessPath, hWnd: Format(&quot;{:#x}&quot;, hWnd)
            , CommandLine: ComObjGet(&quot;winmgmts:&quot;).Get(&quot;Win32_Process.Handle=&quot; . PID).CommandLine, Tooltip: Tooltip}
   }
}

ControlMousePos(ByRef X, ByRef Y)
{
   CoordMode, Mouse
   MouseGetPos, X, Y, hWnd, hControl, 2
   WinGetClass, Class, ahk_id %hWnd%
   
   if Class not in NotifyIconOverflowWindow,Shell_TrayWnd
      Return
   
   if (Class = &quot;NotifyIconOverflowWindow&quot;)
      ControlGet, hToolbar, hwnd,, ToolbarWindow321, ahk_id %hWnd%
   else  {
      for k, v in [&quot;TrayNotifyWnd&quot;, &quot;SysPager&quot;, &quot;ToolbarWindow32&quot;]
         hToolbar := DllCall(&quot;FindWindowEx&quot;, Ptr, k = 1 ? hWnd : hToolbar, Ptr, 0, Str, v, UInt, 0, Ptr)
      if (hToolbar != hControl)
         Return
   }
   Return hToolbar
}

Class RemoteBuffer
{
   __New(PID, size)
   {
      static PROCESS_VM_OPERATION := 0x8, PROCESS_VM_WRITE := 0x20, PROCESS_VM_READ := 0x10
         , MEM_COMMIT := 0x1000, PAGE_READWRITE := 0x4
         
      if !(this.hProc := DllCall(&quot;OpenProcess&quot;, UInt, PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, Int, 0, UInt, PID, Ptr))
         Return
      
      if !(this.ptr := DllCall(&quot;VirtualAllocEx&quot;, Ptr, this.hProc, UInt, 0, Ptr, size, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr))
         Return, &quot;&quot;, DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   __Delete()
   {
      DllCall(&quot;VirtualFreeEx&quot;, Ptr, this.hProc, Ptr, this.ptr, UInt, 0, UInt, MEM_RELEASE := 0x8000)
      DllCall(&quot;CloseHandle&quot;, Ptr, this.hProc)
   }
   
   Read(ByRef LocalBuff, size, offset = 0)
   {
      VarSetCapacity(LocalBuff, size, 0)
      if !DllCall(&quot;ReadProcessMemory&quot;, Ptr, this.hProc, Ptr, this.ptr + offset, Ptr, &amp;LocalBuff, Ptr, size, Ptr, 0)
         Return, 0, DllCall(&quot;MessageBox&quot;, Ptr, 0, Str, &quot;Не удалось прочитать данные`nОшибка &quot; A_LastError, Str, &quot;&quot;, UInt, 0)
      Return 1
   }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 10 Mar 2015 00:05:19 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92430#p92430</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92425#p92425</link>
			<description><![CDATA[<p>Я про это и имел в виду, что прикрепленные кнопки с панели задач не могут быть перенесены в ToolbarWindow321.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 09 Mar 2015 19:42:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92425#p92425</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92424#p92424</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>В&nbsp; ToolbarWindow321 кнопку закрепить невозможно</p></blockquote></div><p>Снова не понимаю твоё выражение. ToolbarWindow321 это уже не панель задач.<br />Просто иконки трея могут быть только в таковом контроле.<br />В AhkSpy проведи по всему Shell_TrayWnd следя за красной рамкой. Собственно:</p><div class="codebox"><pre><code>    If ObjectFromPoint(ChildId).accRole(childId) != 43  
        Return</code></pre></div><p>Нужно теперь только для проверки пустых зон в NotifyIconOverflowWindow.<br />Можно упростить до:</p><div class="codebox"><pre><code>    ObjectFromPoint(ChildId)
    If !ChildId
        Return</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 09 Mar 2015 19:36:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92424#p92424</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92423#p92423</link>
			<description><![CDATA[<p>Я имею в виду эту часть кода:<br /></p><div class="codebox"><pre><code>If ClassNN != ToolbarWindow321
    Return</code></pre></div><p>В&nbsp; ToolbarWindow321 кнопку закрепить невозможно и следовательно скрипт не будет ошибочно срабатывать.</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 09 Mar 2015 18:50:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92423#p92423</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92422#p92422</link>
			<description><![CDATA[<p>Не понял вопроса.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 09 Mar 2015 18:37:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92422#p92422</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92421#p92421</link>
			<description><![CDATA[<p>Но так как ты сейчас отлавливаешь нажатие по контролу, то сейчас ошибок больше быть не должно?</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Mon, 09 Mar 2015 18:35:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92421#p92421</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK:  Трей: определить процесс, иконка которого находится под мышью]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92420#p92420</link>
			<description><![CDATA[<p>У закреплённой кнопки в панели задач, но если её приложение не запущено, тоже самое:<br /></p><div class="codebox"><pre><code>If (Acc.accRole(childId) != 43 || Acc.accState(childId) != 128)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 09 Mar 2015 18:26:52 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92420#p92420</guid>
		</item>
	</channel>
</rss>
