<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Сбор информации]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6541&amp;type=atom" />
	<updated>2011-12-12T18:45:24Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6541</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54533#p54533" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>...не понятно, что даёт команда<br /></p><div class="codebox"><pre><code>OnMessage(0x404, &quot;WM_LBUTTONUP&quot;)</code></pre></div><p>WM_USER = 0x400, если что ))</p></blockquote></div><p>Ну да, какой-то не правильный коммент, надо исправить на WM_USER+4 или AHK_NOTIFYICON.</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Если нужно отследить отпускание левой кнопки мыши над окном скрипта, используется просто</p><div class="codebox"><pre><code>OnMessage(0x202, &quot;WM_LBUTTONUP&quot;)</code></pre></div><p>Я, правда, всё равно не понял, зачем это нужно.</p></blockquote></div><p>Вообще, мне нужно отловить отжим/нажатие (в принципе без разници) левой мыши по иконе в системном лотке, чтобы остановить/запустить таймер.</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ещё из неудобств — зачем копировать в буфер обмена всю информацию сразу? Ведь часто нужно-то что-то конкретное, например, просто название и/или класс окна под курсором.</p></blockquote></div><p>Согласен, можно сделать как в том же AHK Window Info (клик по нужному полю Edit - копирование с туллтипом-уведомлением).</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ещё снятие галки Paint tooltip ничего не даёт, tooltip всё равно продолжает оставаться цветным.</p></blockquote></div><p>Исправил.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-12T18:45:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54533#p54533</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54513#p54513" />
			<content type="html"><![CDATA[<p>Я щас ухожу, Вы извините, вечером отпишусь.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-12T10:52:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54513#p54513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54509#p54509" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Author пишет:</cite><blockquote><p>Я её пробовал, не помогает.</p></blockquote></div><p>Это плохо <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Потом, не понятно, что даёт команда<br /></p><div class="codebox"><pre><code>OnMessage(0x404, &quot;WM_LBUTTONUP&quot;)</code></pre></div><p>WM_USER = 0x400, если что )) Если нужно отследить отпускание левой кнопки мыши над окном скрипта, используется просто </p><div class="codebox"><pre><code>OnMessage(0x202, &quot;WM_LBUTTONUP&quot;)</code></pre></div><p>Я, правда, всё равно не понял, зачем это нужно.<br />Ещё из неудобств — зачем копировать в буфер обмена всю информацию сразу? Ведь часто нужно-то что-то конкретное, например, просто название и/или класс окна под курсором. Нужно изыскать возможность копировать только требуемую информацию.<br />Ещё снятие галки Paint tooltip ничего не даёт, tooltip всё равно продолжает оставаться цветным.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-12-12T10:21:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54509#p54509</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54507#p54507" />
			<content type="html"><![CDATA[<p>Если мне нужно было, чтобы срабатывал хоткей сохранения только когда NumLock выключен, я-бы просто использовал только NumpadClear, но я хотел, чтобы и при включённом NumLock хотей тоже срабатывал (у меня срабатывает в любом состоянии). </p><div class="codebox"><pre><code>OnExit, ExitScript</code></pre></div><p>Я её пробовал, не помогает.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-12T10:05:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54507#p54507</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54502#p54502" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Grey пишет:</cite><blockquote><p>В буфер по нажатию NumpadClear/Numpad5 запись происходит</p></blockquote></div><p>Только в случае, если NumLock&nbsp; в положении Off (у меня он AlwaysOn).<br /></p><div class="quotebox"><cite>Grey пишет:</cite><blockquote><p>Если закрыть скрипт через диспетчер, или запустить через редактор SciTE и потом через него же закрыть, да, метка выхода не срабатывает.</p></blockquote></div><p>Понял, тебе нужно познакомиться с командой <a href="http://l.autohotkey.net/docs/commands/OnExit.htm">OnExit</a>.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-12-12T09:45:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54502#p54502</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54499#p54499" />
			<content type="html"><![CDATA[<p>В буфер по нажатию NumpadClear/Numpad5 запись происходит (по крайней мере у меня и пары товарищей которых просил тестировать). Если закрыть скрипт через диспетчер, или запустить через редактор SciTE и потом через него же закрыть, да, метка выхода не срабатывает. Если закрывать скрипт по хоткею или через пункт в меню, метка отрабатывает положенное.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-12T09:30:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54499#p54499</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54497#p54497" />
			<content type="html"><![CDATA[<p>Windows XP. Информация в буфер обмена не сохраняется, после выхода курсор остался в виде креста, помогла только перезагрузка.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-12-12T08:29:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54497#p54497</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54484#p54484" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>...негативные эмоции.</p></blockquote></div><p>Нисколько. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Критика, замечания - это нормано.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-11T21:30:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54484#p54484</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54483#p54483" />
			<content type="html"><![CDATA[<p>И впрямь никто не говорил про win 7 x64 ^^ но раз уж написано:<br /></p><div class="quotebox"><blockquote><p>Замечания: при использовании в Win7, следует менять тему с полупрозрачными окантовками окон (Aero) на любую другую, не возможен двойной левый клик.</p></blockquote></div><p>То я счёл уместным и своё «замечание». <br />Сожалею если подобная информация вызывает негативные эмоции, впредь не буду обременять вас багрепортами.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2011-12-11T21:27:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54483#p54483</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54482#p54482" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>А на win7 x64 запуск скрипта вызывает падение...</p></blockquote></div><p>Ну так а кто говорил про Win7 x64? Если так уж сильно нужно, то при желании можно довести до желаемого, хотя ни, что не мешает запустить этот скрипт в х32 интерпретаторе.</p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-11T21:16:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54482#p54482</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54481#p54481" />
			<content type="html"><![CDATA[<p>А на win7 x64 запуск скрипта вызывает падение ahk и установку «крестообразного» курсора вместо «Arrow»<br /></p><div class="quotebox"><blockquote><p>Faulting application name: AutoHotkey.exe, version: 1.1.5.4, time stamp: 0x4edc2e51<br />Faulting module name: COMCTL32.dll, version: 6.10.7601.17514, time stamp: 0x4ce7c45b<br />Exception code: 0xc0000005</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2011-12-11T20:51:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54481#p54481</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Сбор информации]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54480#p54480" />
			<content type="html"><![CDATA[<p>Очень хотелось создать инструмент для сбора как можно большей информации, что-то вроде AutoIt3 Window Spy или AHK Window Info (но в отличие от них, чтобы инструмент собирал всю информацию на экране, а не только с окон), а так же понравилось как реализована идея увеличения области под курсором когда определяешь цвет в Color Spy.</p><p>Способности: сбор информации с окон, системного лотка, панели задач в WinXP и Win7, работа с ANSI и Unicode версиями интерпретатора.<br />Замечания: при использовании в Win7, следует менять тему с полупрозрачными окантовками окон (Aero) на любую другую, не возможен двойной левый клик.</p><div class="codebox"><pre><code>#NoEnv
CoordMode, Pixel
DetectHiddenWindows, On
SetBatchLines, -1
Gui, GUI1: +AlwaysOnTop -Caption +E0x80000 +HwndGUI1hWnd +Owner
Gui, GUI1: Show, w150 h150, 10xZoom Of Gathering Info
OnMessage(0x201, &quot;WM_NCLBUTTONDOWN&quot;) ; WM_LBUTTONDOWN
hModule:=DllCall(&quot;LoadLibrary&quot;, &quot;Str&quot;, &quot;gdiplus.dll&quot;)
VarSetCapacity(GdiplusStartupInput, 16, 0)
NumPut(1, GdiplusStartupInput, 0, &quot;Char&quot;) ; GdiplusVersion
DllCall(&quot;gdiplus\GdiplusStartup&quot;, &quot;UInt*&quot;, pToken
                                , &quot;UInt&quot;, &amp;GdiplusStartupInput
                                , &quot;UInt&quot;, 0)
VarSetCapacity(BITMAPINFO, 40, 0)
NumPut(40, BITMAPINFO, 0) ; biSize
NumPut(150, BITMAPINFO, 4) ; biWidth
NumPut(150, BITMAPINFO, 8) ; biHeight
NumPut(1, BITMAPINFO, 12, &quot;UShort&quot;) ; biPlanes
NumPut(32, BITMAPINFO, 14, &quot;UShort&quot;) ; biBitCount
NumPut(0, BITMAPINFO, 16) ; biCompression
hBitmap:=DllCall(&quot;CreateDIBSection&quot;, &quot;UInt&quot;, hDC
                                   , &quot;UInt&quot;, &amp;BITMAPINFO
                                   , &quot;UInt&quot;, 0
                                   , &quot;UInt*&quot;, 0
                                   , &quot;UInt&quot;, 0
                                   , &quot;UInt&quot;, 0)
DllCall(&quot;ReleaseDC&quot;, &quot;UInt&quot;, 0, &quot;UInt&quot;, hDC)
hMemDC:=DllCall(&quot;CreateCompatibleDC&quot;, &quot;UInt&quot;, 0) ; current screen
DllCall(&quot;SelectObject&quot;, &quot;UInt&quot;, hMemDC, &quot;UInt&quot;, hBitmap)
DllCall(&quot;gdiplus\GdipCreateFromHDC&quot;, &quot;UInt&quot;, hMemDC, &quot;UInt*&quot;, pGraphics)
DllCall(&quot;gdiplus\GdipCreateFromHDC&quot;, &quot;UInt&quot;, hMemDC, &quot;UInt*&quot;, pGraphics2)
DllCall(&quot;gdiplus\GdipSetSmoothingMode&quot;, &quot;UInt&quot;, pGraphics, &quot;Int&quot;, 3) ; AA low
Color1:=0xFF000000, Color2:=0xFFFFFFFF ; argb
GdipCreatePen(Color1, pPen1) ; black
GdipCreatePen(Color2, pPen2) ; white
GdipCreatePen(Color1, pPen3) ; black dot rect
GdipCreatePen(Color1, pPen4) ; black rect
DllCall(&quot;gdiplus\GdipSetPenDashStyle&quot;, &quot;UInt&quot;, pPen1
                                     , &quot;Char&quot;, 5) ; DashStyleCustom
VarSetCapacity(Array, 8, 0)
NumPut(4, Array, 0, &quot;Float&quot;) ; dash lenght
NumPut(3, Array, 4, &quot;Float&quot;) ; space lenght
DllCall(&quot;gdiplus\GdipSetPenDashArray&quot;, &quot;UInt&quot;, pPen1
                                     , &quot;Int&quot;, &amp;Array
                                     , &quot;Int&quot;, 2) ; count
DllCall(&quot;gdiplus\GdipSetPenDashStyle&quot;, &quot;UInt&quot;, pPen3
                                     , &quot;Char&quot;, 2) ; DashStyleDot
DllCall(&quot;gdiplus\GdipCreateSolidFill&quot;, &quot;Int&quot;, Color1, &quot;UInt*&quot;, pBrush)
VarSetCapacity(TRACKMOUSEEVENT, 16, 0)
NumPut(16, TRACKMOUSEEVENT, 0) ; cbSize
NumPut(0x3, TRACKMOUSEEVENT, 4) ; dwFlags
NumPut(1, TRACKMOUSEEVENT, 12) ; dwHoverTime
TipText:=XPos:=YPos:=0, OffXPos:=OffYPos:=40, TextColor:=&quot;cBlue&quot;
VarSetCapacity(TOOLINFO, 44, 0)
NumPut(44, TOOLINFO, 0) ; cbSize
NumPut(0xA0, TOOLINFO, 4) ; uFlags, TTF_TRACK+TTF_ABSOLUTE
NumPut(hToolTip, TOOLINFO, 12) ; hwnd
NumPut(&amp;TipText, TOOLINFO, 36) ; lpszText
Is64BitWindows:=Is64bitOS(), hToolTip:=CreateToolTip(), ResumeTimer()
SendMessage, 0x416,,,, % &quot;ahk_id&quot;hTooltip ; TTM_GETTIPBKCOLOR
DefColorTipBack:=ErrorLevel
SendMessage, 0x417,,,, % &quot;ahk_id&quot;hTooltip ; TTM_GETTIPTEXTCOLOR
DefColorTipText:=ErrorLevel
Menu, Tray, NoStandard
Menu, Tray, Icon, shell32.dll, 172 ; or 23
Menu, Tray, Tip, Gathering info
Menu, Tray, Add, &amp;High smooth, SetSmoothingMode
Menu, Tray, Add, &amp;Paint tooltip, SetPaintTooltip
Menu, Tray, Add, Pin &amp;zoomview, SetZoomViewBehavior
Menu, Tray, Add, &amp;About, About
Menu, Tray, Add
Menu, Tray, Add, &amp;Exit (Tilde+Esc), ExitScript
OnMessage(0x404, &quot;WM_LBUTTONUP&quot;) ; AHK_NOTIFYICON
Hotkey, NumpadUp, MoveCursor
Hotkey, NumpadDown, MoveCursor
Hotkey, NumpadLeft, MoveCursor
Hotkey, NumpadRight, MoveCursor
Hotkey, Numpad8, MoveCursor
Hotkey, Numpad2, MoveCursor
Hotkey, Numpad4, MoveCursor
Hotkey, Numpad6, MoveCursor
Hotkey, sc29 &amp; Esc, ExitScript
Return

ChaseCursor:
   CoordMode, Mouse, Relative
   MouseGetPos, XPosRel, YPosRel
   CoordMode, Mouse
   MouseGetPos, XPosAbs, YPosAbs, WinID, WinControl
   ControlGetFocus, WinControlGF, % &quot;ahk_id&quot;WinID
   ControlGetPos, ControlX, ControlY, ControlW, ControlH
                , % WinControl, % &quot;ahk_id&quot;WinID
   WinGetTitle, WinTitle, % &quot;ahk_id&quot;WinID
   WinGet, WinProcName, ProcessName, % &quot;ahk_id&quot;WinID
   WinGet, WinProcPID, PID, % &quot;ahk_id&quot;WinID
   WinProcAdress:=DllCall(&quot;GetClassLong&quot;, &quot;UInt&quot;, WinID, &quot;Int&quot;, -24)
   WinGetClass, WinClass, % &quot;ahk_id&quot;WinID
   WinGetPos, WinX, WinY, WinW, WinH, % &quot;ahk_id&quot;WinID
   StringUpper, WinID, WinID
   PixelGetColor, CurrentColor, XPosAbs, YPosAbs, RGB
   If IsPainted
   {
      PixelGetColor, CurrentColor2, XPosAbs, YPosAbs
      r:=(CurrentColor2 &amp; 0x00FF00)&gt;&gt;8, g:=(CurrentColor2 &amp; 0x0000FF)&gt;&gt;0
      b:=(CurrentColor2 &amp; 0xFF0000)&gt;&gt;16, InvColor:=(CurrentColor2 ^ 0xFFFFFF)
      r2:=(InvColor &amp; 0x00FF00)&gt;&gt;8, g2:=(InvColor &amp; 0x0000FF)&gt;&gt;0
      b2:=(InvColor &amp; 0xFF0000)&gt;&gt;16, CurrentColor3:=CurrentColor2
      Diff_r:=r-r2, Diff_g:=g-g2, Diff_b:=b-b2, Treshold:=25
      If ((Diff_r&lt;0 And Diff_r&gt;-Treshold Or Diff_r&gt;0 And Diff_r&lt;Treshold)
      And (Diff_g&lt;0 And Diff_g&gt;-Treshold Or Diff_g&gt;0 And Diff_g&lt;Treshold)
      And (Diff_b&lt;0 And Diff_b&gt;-Treshold Or Diff_b&gt;0 And Diff_b&lt;Treshold))
         CurrentColor3-=0x757575
      SendMessage, 0x413, CurrentColor2,,
                 , % &quot;ahk_id&quot;hTooltip ; TTM_SETTIPBKCOLOR
      SendMessage, 0x414, CurrentColor3 ^ 0xFFFFFF,,
                 , % &quot;ahk_id&quot;hTooltip ; TTM_SETTIPTEXTCOLOR
   }
   If (WinClass=&quot;Shell_TrayWnd&quot; And A_OSVersion=&quot;WIN_XP&quot;
                                And WinControl=&quot;ToolbarWindow322&quot;)
      TipText:=GetToolbarInfo(1)
   Else If (WinClass=&quot;Shell_TrayWnd&quot; And WinControl=&quot;MSTaskListWClass1&quot;)
      TipText:=GetTaskInfo()
   Else If (WinClass=&quot;Shell_TrayWnd&quot;
   And (WinControl!=&quot;TrayClockWClass1&quot;
   And WinControl!=&quot;TrayShowDesktopButtonWClass1&quot;
   And WinControl!=&quot;Button1&quot;
   And WinControl!=&quot;Button2&quot;
   And WinControl!=&quot;ReBarWindow321&quot;
   And WinControl!=&quot;CiceroUIWndFrame1&quot;))
      TipText:=GetToolbarInfo(2)
   Else
      TipText:=GetWinInfo()
   If (XPos!=XPosAbs Or YPos!=YPosAbs)
   {
      XPos:=XPosAbs, YPos:=YPosAbs
      SendMessage, 0x41E,, &amp;TOOLINFO,, % &quot;ahk_id&quot;hToolTip ; TTM_GETBUBBLESIZE
      Width:=ErrorLevel &amp; 0xFFFF, Height:=ErrorLevel&gt;&gt;16
      CurXPos:=XPosAbs, CurYPos:=YPosAbs
      If (CurXPos+OffXPos+Width&gt;A_ScreenWidth)
         CurXPos-=(Width+OffXPos)
      Else
         CurXPos+=OffXPos
      If (CurYPos+OffYPos+Height&gt;A_ScreenHeight)
         CurYPos-=(Height+OffYPos)
      Else
         CurYPos+=OffYPos
      PostMessage, 0x412,, (CurXPos|CurYPos&lt;&lt;16),
                 , % &quot;ahk_id&quot;hToolTip ; TTM_TRACKPOSITION
   }
   If GetKeyState(&quot;NumpadClear&quot;, &quot;P&quot;) Or GetKeyState(&quot;Numpad5&quot;, &quot;P&quot;)
   {
      Clipboard:=TipText
      TipText.=&quot;`n`nsaved&quot;
   }
   Else
      TipText.=&quot;`n`nuse numpad-arrows for smallest moves of cursor&quot;
               . &quot;`npress numpad5 button to save info into clipboard&quot;
              . &quot;`nclick left mouse button on tray icon for use pause&quot;
   SetToolTipText(&amp;TipText)
   Loop, 15
      GdipDrawLine(A_Index-1)
   If !IsZoomDragged
   {
      If (XPosAbs&lt;A_ScreenWidth/2 And YPosAbs&lt;A_ScreenHeight/2)
         WinMove, % &quot;ahk_id&quot;GUI1hWnd,, A_ScreenWidth-150, A_ScreenHeight-150
      Else If (XPosAbs&gt;A_ScreenWidth/2 And YPosAbs&lt;A_ScreenHeight/2)
         WinMove, % &quot;ahk_id&quot;GUI1hWnd,, 0, A_ScreenHeight-150
      Else If (XPosAbs&gt;A_ScreenWidth/2 And YPosAbs&gt;A_ScreenHeight/2)
         WinMove, % &quot;ahk_id&quot;GUI1hWnd,, 0, 0
      Else
         WinMove, % &quot;ahk_id&quot;GUI1hWnd,, A_ScreenWidth-150, 0
   }
   GdipDrawObject(&quot;Line&quot;, pPen2, 0, 75, 70, 75) ; white line
   GdipDrawObject(&quot;Line&quot;, pPen2, 80, 75, 150, 75)
   GdipDrawObject(&quot;Line&quot;, pPen2, 75, 0, 75, 70)
   GdipDrawObject(&quot;Line&quot;, pPen2, 75, 80, 75, 150)
   GdipDrawObject(&quot;Line&quot;, pPen1, 69, 75, 1, 75) ; black dash line
   GdipDrawObject(&quot;Line&quot;, pPen1, 81, 75, 147, 75)
   GdipDrawObject(&quot;Line&quot;, pPen1, 75, 69, 75, 1)
   GdipDrawObject(&quot;Line&quot;, pPen1, 75, 81, 75, 147)
   GdipDrawObject(&quot;Rectangle&quot;, pPen2, 70, 70, 10, 10) ; white center rect
   GdipDrawObject(&quot;Rectangle&quot;, pPen3, 70, 70, 10, 10) ; black dot center rect
   GdipDrawObject(&quot;Rectangle&quot;, pPen4, 0, 0, 149, 149) ; black outside rect
   DllCall(&quot;UpdateLayeredWindow&quot;, &quot;UInt&quot;, GUI1hWnd
                                , &quot;UInt&quot;, 0
                                , &quot;UInt&quot;, 0
                                , &quot;Int64*&quot;, 0x09600000096 ; 150x150
                                , &quot;UInt&quot;, hMemDC
                                , &quot;Int64*&quot;, 0
                                , &quot;UInt&quot;, 0
                                , &quot;UInt*&quot;, 0x01ff0000 ; BLENDFUNCTION
                                , &quot;UInt&quot;, 2)
   Return

MoveCursor:
   If % A_ThisHotkey=&quot;NumpadUp&quot; Or A_ThisHotkey=&quot;Numpad8&quot;
      MouseMove, XPosRel, YPosRel-1
   Else If % A_ThisHotkey=&quot;NumpadDown&quot; Or A_ThisHotkey=&quot;Numpad2&quot;
      MouseMove, XPosRel, YPosRel+1
   Else If % A_ThisHotkey=&quot;NumpadLeft&quot; Or A_ThisHotkey=&quot;Numpad4&quot;
      MouseMove, XPosRel-1, YPosRel
   Else If % A_ThisHotkey=&quot;NumpadRight&quot; Or A_ThisHotkey=&quot;Numpad6&quot;
      MouseMove, XPosRel+1, YPosRel
   KeyWait, % A_ThisHotkey
   Return

SetZoomViewBehavior:
   IsZoomDragged:=!IsZoomDragged
   WinMove, % &quot;ahk_id&quot;GUI1hWnd,, A_ScreenWidth/2-76, A_ScreenHeight/2-76
   Menu, Tray, Rename, % (!IsZoomDragged ? &quot;Unpin&quot;:&quot;Pin&quot;)&quot; &amp;zoomview&quot;
                     , % (!IsZoomDragged ? &quot;Pin&quot;:&quot;Unpin&quot;)&quot; &amp;zoomview&quot;
   Return

SetSmoothingMode:
   IsSmoothingMode:=!IsSmoothingMode
   DllCall(&quot;gdiplus\GdipSetSmoothingMode&quot;, &quot;UInt&quot;, pGraphics
                                         , &quot;Int&quot;, IsSmoothingMode ? 4:3)
   Menu, Tray, Rename, % (!IsSmoothingMode ? &quot;&amp;Low&quot;:&quot;&amp;High&quot;)&quot; smooth&quot;
                     , % (!IsSmoothingMode ? &quot;&amp;High&quot;:&quot;&amp;Low&quot;)&quot; smooth&quot;
   Return

SetPaintTooltip:
   IsPainted:=!IsPainted
   Menu, Tray, % IsPainted ? &quot;Check&quot;:&quot;Uncheck&quot;, &amp;Paint tooltip
   If % A_OSVersion=&quot;WIN_7&quot;
      Dllcall(&quot;UxTheme\SetWindowTheme&quot;, &quot;Int&quot;, hToolTip
                                      , !IsPainted ? &quot;Ptr&quot;:&quot;Str&quot;
                                      , !IsPainted ? 0:&quot;&quot;
                                      , !IsPainted ? &quot;Ptr&quot;:&quot;Str&quot;
                                      , !IsPainted ? 0:&quot;&quot;)
   Else
   {
      If IsPainted
         Dllcall(&quot;UxTheme\SetWindowTheme&quot;, &quot;Int&quot;, hToolTip
                                         , &quot;Str&quot;, &quot;&quot;
                                         , &quot;Str&quot;, &quot;&quot;)
      Else
      {
         PostMessage, 0x413, DefColorTipBack,,, % &quot;ahk_id&quot;hTooltip
         PostMessage, 0x414, DefColorTipText,,, % &quot;ahk_id&quot;hTooltip
      }
   }
   Return

About:
   IsAbout:=True
   If IsPaused
      Goto, ByPassI
   StopTimer()
ByPassI:
   Gui, GUI2: Font, Bold
   Gui, GUI2: Add, Text
      , x32 y30 w140 h20 +Center
      , Gathering info
   Gui, GUI2: Font
   Gui, GUI2: Add, Text
      , x32 y50 w140 h20 +Center
      , Made using AutoHotkey
   Gui, GUI2: Font, Underline cBlue
   Gui, GUI2: Add, Text
      , x24 y90 w156 h20 gAHKHome +HwndGUI2hlhWnd +Center
      , www.autohotkey.com
   Gui, GUI2: Font
   Gui, GUI2: Add, GroupBox, x22 y10 w160 h110
   Gui, GUI2: +HwndGUI2hWnd -MinimizeBox -Resize
   Gui, GUI2: Show, Center h135 w205, About
   hHandCursor:=DllCall(&quot;LoadCursor&quot;, &quot;UInt&quot;, 0, &quot;Int&quot;, 32649) ; IDC_HAND
   DllCall(&quot;SetClassLong&quot;, &quot;UInt&quot;, GUI2hlhWnd, &quot;Int&quot;, -12, &quot;UInt&quot;, hHandCursor)
   NumPut(GUI2hWnd, TRACKMOUSEEVENT, 8) ; hwndTrack
   OnMessage(0x200, &quot;WM_MOUSEMOVE&quot;), OnMessage(0x2A1, &quot;WM_MOUSEHOVER&quot;)
   OnMessage(0x2A3, &quot;WM_MOUSELEAVE&quot;)
   Return

AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return

GUI2GuiClose:
   If IsPaused
      Goto, ByPassO
   ResumeTimer()
ByPassO:
   Gui, GUI2: Destroy
   IsAbout:=False
   Return

ExitScript:
   PostMessage, A_IsUnicode ? 0x433:0x405,, &amp;TOOLINFO,
              , % &quot;ahk_id&quot;hToolTip ; TTM_DELTOOL
   DllCall(&quot;DestroyWindow&quot;, &quot;UInt&quot;, hToolTip)
   DllCall(&quot;gdiplus\GdiplusShutdown&quot;, &quot;UInt&quot;, pToken)
   DllCall(&quot;FreeLibrary&quot;, &quot;UInt&quot;, hModule)
   SetDefaultCursors()
   ExitApp

GetWinInfo()
{
   global
   If !WinTitle
      WinTitle:=&quot;no data&quot;
   If !WinControl
      WinControl:=&quot;no data&quot;
   If !WinControlGF
      WinControlGF:=&quot;no data&quot;
   Return, &quot;title: &quot;WinTitle
       . &quot;`nname: &quot;WinProcName
       . &quot;`npid: &quot;WinProcPID
       . &quot;`nhwnd: 0x&quot;SubStr(WinID, 3)
       . &quot;`nadress: &quot;Dec2Hex(WinProcAdress)
       . &quot;`nclass: &quot;WinClass
       . &quot;, width: &quot;WinW &quot;, height: &quot;WinH
       . &quot;, x: &quot;WinX &quot;, y: &quot;WinY
       . &quot;`nctrl: &quot;WinControl
       . &quot;, width: &quot;ControlW &quot;, height: &quot;ControlH
       . &quot;, x: &quot;ControlX &quot;, y: &quot;ControlY
       . &quot;`nctrlgf: &quot;WinControlGF
       . &quot;`npos: abs_x: &quot;XPosAbs &quot;, abs_y: &quot;YPosAbs
       . &quot; (rel_x: &quot;XPosRel &quot;, rel_y: &quot;YPosRel &quot;)&quot;
       . &quot;`ncolor: &quot;CurrentColor
       . &quot; (&quot;Hex2Dec(CurrentColor)&quot;)&quot;
       . &quot;`ninvcolor: 0x&quot;SubStr(Dec2Hex(CurrentColor ^ 0xFFFFFF), 5)
       . &quot; (&quot;Hex2Dec(CurrentColor ^ 0xFFFFFF)&quot;)&quot;
}

Dec2Hex(DecData)
{
   HexData:=00000000
   DllCall(&quot;msvcrt.dll\s&quot;(A_IsUnicode ? &quot;w&quot;:&quot;&quot;)&quot;printf&quot;, &quot;Str&quot;, HexData
                                                       , &quot;Str&quot;, &quot;0x%08X&quot;
                                                       , &quot;UInt&quot;, DecData)
   Return, HexData
}

Hex2Dec(HexData)
{
   r:=(HexData&gt;&gt;0x10) &amp; 0xFF
   g:=(HexData&gt;&gt;0x08) &amp; 0xFF
   b:=(HexData&gt;&gt;0x00) &amp; 0xFF
   Return, &quot;R&quot;r &quot;, G&quot;g &quot;, B&quot;b
}

CreateToolTip()
{
   global
   hToolTip:=DllCall(&quot;CreateWindowEx&quot;, &quot;UInt&quot;, 0x8 ; WS_EX_TOPMOST
                                     , &quot;Str&quot;, &quot;tooltips_class32&quot; ; TOOLTIP_CLASS
                                     , &quot;Str&quot;, &quot;&quot;
                                     , &quot;UInt&quot;, 0x3 ; TTS_NOPREFIX+TTS_ALWAYSTIP
                                     , &quot;UInt&quot;, 0x80000000 ; CW_USEDEFAULT
                                     , &quot;UInt&quot;, 0x80000000
                                     , &quot;UInt&quot;, 0x80000000
                                     , &quot;UInt&quot;, 0x80000000
                                     , &quot;UInt&quot;, 0
                                     , &quot;UInt&quot;, 0
                                     , &quot;UInt&quot;, 0
                                     , &quot;UInt&quot;, 0)
   PostMessage, A_IsUnicode ? 0x432:0x404,, &amp;TOOLINFO,
              , % &quot;ahk_id&quot;hToolTip ; TTM_ADDTOOL
   PostMessage, 0x411, 0x1, &amp;TOOLINFO,, % &quot;ahk_id&quot;hToolTip ; TTM_TRACKACTIVATE
   PostMessage, 0x418,, A_ScreenWidth/2,, % &quot;ahk_id&quot;hToolTip ; TTM_SETMAXTIPWIDTH
   Return, hToolTip
}

SetToolTipText(TText)
{
   global
   NumPut(TText, TOOLINFO, 36)
   PostMessage, A_IsUnicode ? 0x439:0x40C,, &amp;TOOLINFO,
              , % &quot;ahk_id&quot;hToolTip ; TTM_UPDATETIPTEXT
}

SetTextColor(DefinedColor)
{
   global
   TextColor:=DefinedColor
   Gui, GUI2: Font, % &quot;Underline&quot; DefinedColor
   GuiControl, GUI2: Font, Static3
}

WM_NCLBUTTONDOWN()
{
   global
   PostMessage, 0xA1, 0x2,,, % &quot;ahk_id&quot;GUI1hWnd ; WM_NCLBUTTONDOWN, HTCAPTION
}

WM_MOUSEMOVE()
{
   global
   If !Tracking
      DllCall(&quot;TrackMouseEvent&quot;, &quot;Int&quot;, &amp;TRACKMOUSEEVENT)
   Else
   {
      MouseGetPos,,,, WinControl2
      If WinControl2=Static3
         SetTextColor(&quot;cRed&quot;)
      Else If TextColor!=cBlue
         SetTextColor(&quot;cBlue&quot;)
   }
}

WM_MOUSEHOVER()
{
   global
   Tracking:=True
}

WM_MOUSELEAVE()
{
   global
   MouseGetPos,,,, WinControl3
   If WinControl3=Static3
      Return
   SetTextColor(&quot;cBlue&quot;), Tracking:=False
}

WM_LBUTTONUP(wParam, lParam, Msg, hWnd)
{
   global
   If lParam=0x202 ; WM_LBUTTONUP
   {
      If IsAbout
         Return
      IsPaused:=!IsPaused
      IsPaused ? StopTimer():ResumeTimer()
      Menu, Tray, Icon, shell32.dll, % IsPaused ? 28:172
   }
}

StopTimer()
{
   global
   SetTimer, ChaseCursor, Off
   PostMessage, 0x411,, &amp;TOOLINFO,, % &quot;ahk_id&quot;hToolTip
   Gui, GUI1: Cancel
   SetDefaultCursors()
}

ResumeTimer()
{
   global
   SetDefinedCursor(32515) ; OCR_NORMAL
   PostMessage, 0x411, 0x1, &amp;TOOLINFO,, % &quot;ahk_id&quot;hToolTip
   Gui, GUI1: Show
   SetTimer, ChaseCursor, 100
}

SetDefaultCursors()
{
   DllCall(&quot;SystemParametersInfo&quot;, &quot;UInt&quot;, 0x57 ; SPI_SETCURSORS
                                 , &quot;UInt&quot;, 0
                                 , &quot;UInt&quot;, 0
                                 , &quot;UInt&quot;, 0)
}

SetDefinedCursor(Cursor)
{
   SystemCursors:=&quot;
   ,32512,32513,32514,32515,32516,32640,32641,32642
   ,32643,32644,32645,32646,32648,32649,32650,32651&quot;
   Loop, Parse, SystemCursors, CSV
   {
      If % A_Loopfield=Cursor
      {
         Loop, Parse, SystemCursors, CSV
         {
            hCursor:=DllCall(&quot;LoadCursor&quot;, &quot;UInt&quot;, 0, &quot;Int&quot;, Cursor)
            hCursor:=DllCall(&quot;CopyImage&quot;, &quot;UInt&quot;, hCursor
                                        , &quot;UInt&quot;, 0x2 ; IMAGE_CURSOR
                                        , &quot;Int&quot;, 28
                                        , &quot;Int&quot;, 28
                                        , &quot;UInt&quot;, 0)
            DllCall(&quot;SetSystemCursor&quot;, &quot;UInt&quot;, hCursor
                                     , &quot;Int&quot;, A_Loopfield)
         }
      }
   }
}

GdipDrawLine(Y)
{
   global
   Loop, 15
   {
      PixelGetColor, CurrentColor, XPos-7+A_Index-1, YPos-7+Y, RGB
      DllCall(&quot;gdiplus\GdipSetSolidFillColor&quot;, &quot;UInt&quot;, pBrush
                                             , &quot;UInt&quot;, CurrentColor|0xFF000000)
      DllCall(&quot;gdiplus\GdipFillRectangle&quot;, &quot;UInt&quot;, pGraphics
                                         , &quot;UInt&quot;, pBrush
                                         , &quot;Float&quot;, (A_Index-1)*10
                                         , &quot;Float&quot;, Y*10
                                         , &quot;Float&quot;, 10 ; w
                                         , &quot;Float&quot;, 10) ; h
   }
}

GdipCreatePen(PenColor, ByRef N)
{
   global
   DllCall(&quot;gdiplus\GdipCreatePen1&quot;, &quot;Int&quot;, PenColor
                                   , &quot;Float&quot;, 1 ; width
                                   , &quot;Char&quot;, 2 ; unit - pixel
                                   , &quot;UInt*&quot;, N)
}

GdipDrawObject(Kind, N, FromX, FromY, IntoX, IntoY)
{
   global
   DllCall(&quot;gdiplus\GdipDraw&quot; . Kind, &quot;UInt&quot;, pGraphics2
                                    , &quot;UInt&quot;, N
                                    , &quot;Float&quot;, FromX
                                    , &quot;Float&quot;, FromY
                                    , &quot;Float&quot;, IntoX
                                    , &quot;Float&quot;, IntoY)
}

GetTaskInfo()
{
   global
   FoundTIcon:=False
   ControlGet, hWnd, Hwnd,, MSTaskListWClass1, % &quot;ahk_class&quot;WinClass
   StringUpper, hWnd, hWnd
   TaskList:=AccessibleObjectFromWindow(hWnd)
   Focus:=TaskList.accFocus, Parent:=TaskList.accParent
   Selection:=TaskList.accSelection
   Loop, % TaskList.accChildCount
   {
      TWinTitle:=TaskList.accName(A_Index)
      DefAction:=TaskList.accDefaultAction(A_Index)
      Role:=TaskList.accRole(A_Index)
      State:=TaskList.accState(A_Index)
      TaskList.accLocation(ComObjParameter(0x4003, &amp;L:=0) ; VT_BYREF+VT_I4
                         , ComObjParameter(0x4003, &amp;T:=0)
                         , ComObjParameter(0x4003, &amp;W:=0)
                         , ComObjParameter(0x4003, &amp;H:=0)
                         , A_Index)
      WinGet, TWinID, ID, % TWinTitle
      WinGetPos, TWinX, TWinY, TWinW, TWinH, % &quot;ahk_id&quot;TWinID
      StringUpper, TWinID, TWinID
      If !TWinID
         TWinX:=TWinY:=TWinW:=TWinH:=TWinID:=&quot;no data&quot;
      TIconLEFTAbs:=NumGet(L), TIconTOPAbs:=NumGet(T)
      TIconWidth:=NumGet(W), TIconHeight:=NumGet(H)
      If (RContains(TIconLEFTAbs
                  , TIconTOPAbs
                  , TIconWidth
                  , TIconHeight
                  , XPosAbs
                  , YPosAbs))
      {
         If !Focus
            Focus:=&quot;no data&quot;
         FoundTIcon:=True
         TL:=&quot;title: &quot;TWinTitle
         . &quot;`nhwnd: 0x&quot;SubStr(TWinID, 3)
         . &quot;`nfocus: &quot;Focus
         . &quot;`ndefaction: &quot;DefAction
         . &quot;`nrole: &quot;Role
         . &quot; (&quot;GetRoleText(Role)&quot;)&quot;
         . &quot;`nstate: &quot;State
         . &quot; (&quot;GetStateText(State)&quot;)&quot;
         . &quot;`nwidth: &quot;TWinW &quot;, height: &quot;TWinH
         . &quot;, x: &quot;TWinX &quot;, y: &quot;TWinY
         . &quot;`niconpos: left: &quot;NumGet(L) &quot;, top: &quot;NumGet(T)
         . &quot;, width: &quot;NumGet(W) &quot;, height: &quot;NumGet(H)
         Break
      }
   }
   If !WinControl
      WinControl:=&quot;no data&quot;
   If !WinControlGF
      WinControlGF:=&quot;no data&quot;
   If !FoundTIcon
      TL:=&quot;title: &quot;TaskList.accName(0)
      . &quot;`nname: &quot;WinProcName
      . &quot;`npid: &quot;WinProcPID
      . &quot;`nhwnd: 0x&quot;SubStr(hWnd, 3)
      . &quot;`nadress: &quot;Dec2Hex(WinProcAdress)
      . &quot;`nclass: &quot;WinClass
      . &quot;, width: &quot;WinW &quot;, height: &quot;WinH
      . &quot;, x: &quot;WinX &quot;, y: &quot;WinY
      . &quot;`nctrl: &quot;WinControl
      . &quot;, width: &quot;ControlW &quot;, height: &quot;ControlH
      . &quot;, x: &quot;ControlX &quot;, y: &quot;ControlY
      . &quot;`nctrlgf: &quot;WinControlGF
   Return, TL . &quot;`npos: abs_x: &quot;XPosAbs &quot;, abs_y: &quot;YPosAbs
              . &quot; (rel_x: &quot;XPosRel &quot;, rel_y: &quot;YPosRel &quot;)&quot;
              . &quot;`ncolor: &quot;CurrentColor
              . &quot; (&quot;Hex2Dec(CurrentColor)&quot;)&quot;
              . &quot;`ninvcolor: 0x&quot;SubStr(Dec2Hex(CurrentColor ^ 0xFFFFFF), 5)
              . &quot; (&quot;Hex2Dec(CurrentColor ^ 0xFFFFFF)&quot;)&quot;
}

AccessibleObjectFromWindow(Hwnd)
{
   VarSetCapacity(IID, 16) ; GuidAttribute 618736E0-3C3D-11CF-810C-00AA00389B71
   NumPut(0x11CF3C3D618736E0, IID, 0, &quot;Int64&quot;) ; IID_IAccessible (first-half)
   NumPut(0x719B3800AA000C81, IID, 8, &quot;Int64&quot;) ; IID_IAccessible (second-half)
   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;, -4 ; OBJID_Client
                                                  , &quot;Ptr&quot;, &amp;IID
                                                  , &quot;Ptr*&quot;, ppvObject)
   Return, ComObjEnwrap(ppvObject)
}

GetRoleText(nRole)
{
   nSize:=DllCall(&quot;Oleacc\GetRoleText&quot;, &quot;UInt&quot;, nRole, &quot;Ptr&quot;, 0, &quot;UInt&quot;, 0)
   VarSetCapacity(sRole, (A_IsUnicode ? 2:1)*nSize)
   DllCall(&quot;Oleacc\GetRoleText&quot;, &quot;UInt&quot;, nRole, &quot;Str&quot;, sRole, &quot;UInt&quot;, nSize+1)
   Return, sRole
}

GetStateText(nState)
{
   nSize:=DllCall(&quot;Oleacc\GetStateText&quot;, &quot;UInt&quot;, nState, &quot;Ptr&quot;, 0, &quot;UInt&quot;, 0)
   VarSetCapacity(sState, (A_IsUnicode ? 2:1)*nSize)
   DllCall(&quot;Oleacc\GetStateText&quot;, &quot;UInt&quot;, nState, &quot;Str&quot;, sState, &quot;UInt&quot;, nSize+1)
   Return, sState
}

Is64bitOS()
{
   Return, (A_PtrSize=8)
   Or DllCall(&quot;IsWow64Process&quot;, &quot;Ptr&quot;, DllCall(&quot;GetCurrentProcess&quot;)
                              , &quot;Int*&quot;, isWow64) And isWow64
}

GetToolbarInfo(TBType)
{
   global
   ClassName:=TBType=1 ? &quot;MSTaskSwWClass1&quot;:&quot;TrayNotifyWnd1&quot;
   ControlGet, hParent, hWnd,, % ClassName, % &quot;ahk_class&quot;WinClass
   ControlGet, hChild , hWnd,, ToolbarWindow321, % &quot;ahk_id&quot;hParent
   WinGet, TBPID, PID, % &quot;ahk_class&quot;WinClass
   WinGetPos, WinXPos, WinYPos,,, % &quot;ahk_id&quot;hChild
   hProc:=DllCall(&quot;OpenProcess&quot;, &quot;UInt&quot;, 0x18 ; PROCESS_VM_OPERATION+PROCESS_VM_READ
                               , &quot;Int&quot;, 0
                               , &quot;UInt&quot;, TBPID)
   pProc:=DllCall(&quot;VirtualAllocEx&quot;, &quot;UInt&quot;, hProc
                                  , &quot;UInt&quot;, 0
                                  , &quot;UInt&quot;, 32
                                  , &quot;UInt&quot;, 0x1000 ; MEM_COMMIT
                                  , &quot;UInt&quot;, 0x4) ; PAGE_READWRITE
   pRECT:=DllCall(&quot;VirtualAllocEx&quot;, &quot;UInt&quot;, hProc
                                  , &quot;UInt&quot;, 0
                                  , &quot;UInt&quot;, 16
                                  , &quot;UInt&quot;, 0x1000
                                  , &quot;UInt&quot;, 0x4)
   SendMessage, 0x418,,,, % &quot;ahk_id&quot;hChild ; TB_BUTTONCOUNT
   VarSetCapacity(BTN, 32, 0), VarSetCapacity(INFO, 32, 0), VarSetCapacity(RECT, 16)
   Loop, % ErrorLevel
   {
      SendMessage, 0x417, A_Index-1, pProc,, % &quot;ahk_id&quot;hChild ; TB_GETBUTTON
      DllCall(&quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hProc
                                 , &quot;UInt&quot;, pProc
                                 , &quot;UInt&quot;, &amp;BTN
                                 , &quot;UInt&quot;, 32
                                 , &quot;UInt&quot;, 0)
      iBitmap:=NumGet(BTN, OffSet:=0), OffSet+=4
      idCommand:=NumGet(BTN, OffSet), OffSet+=4
      fsState:=NumGet(BTN, OffSet, &quot;Char&quot;), OffSet+=1
      fsStyle:=NumGet(BTN, OffSet, &quot;Char&quot;), OffSet+=1
      OffSet+=(Is64BitWindows ? 6:2), TypeOS:=(Is64BitWindows ? &quot;Int64&quot;:&quot;Int&quot;)
      dwData:=NumGet(BTN, OffSet, TypeOS), OffSet+=(Is64BitWindows ? 8:4)
      iString:=NumGet(BTN, OffSet, TypeOS)
      DllCall(&quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hProc
                                 , &quot;UInt&quot;, dwData
                                 , &quot;UInt&quot;, &amp;INFO
                                 , &quot;UInt&quot;, 32
                                 , &quot;UInt&quot;, 0)
      hWnd:=NumGet(INFO, 0), uID:=NumGet(INFO, 4)
      nMsg:=NumGet(INFO, 8), hIcon:=NumGet(INFO, 20)
      WinGet, IconPID, PID, % &quot;ahk_id&quot;hWnd
      WinGet, IconProcName, ProcessName, % &quot;ahk_id&quot;hWnd
      WinGetClass, IconClass, % &quot;ahk_id&quot;hWnd
      VarSetCapacity(IconTooltip, 128), VarSetCapacity(WideTooltip, 128*2)
      DllCall(&quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hProc
                                 , &quot;UInt&quot;, iString
                                 , &quot;UInt&quot;, &amp;WideTooltip
                                 , &quot;UInt&quot;, 128*2
                                 , &quot;UInt&quot;, 0)
      DllCall(&quot;WideCharToMultiByte&quot;, &quot;UInt&quot;, 0
                                   , &quot;UInt&quot;, 0
                                   , &quot;Str&quot;, WideTooltip
                                   , &quot;Int&quot;, -1
                                   , &quot;Str&quot;, IconTooltip
                                   , &quot;Int&quot;, 128
                                   , &quot;UInt&quot;, 0
                                   , &quot;UInt&quot;, 0)
      If A_IsUnicode
         IconTooltip:=WideTooltip
      SendMessage, 0x41D, A_Index-1, pRECT,, % &quot;ahk_id&quot;hChild ; TB_GETITEMRECT
      DllCall(&quot;ReadProcessMemory&quot;, &quot;UInt&quot;, hProc
                                 , &quot;UInt&quot;, pRECT
                                 , &quot;UInt&quot;, &amp;RECT
                                 , &quot;UInt&quot;, 16
                                 , &quot;UInt&quot;, 0)
      IconLEFT:=NumGet(RECT, 0, &quot;Int&quot;), IconTOP:=NumGet(RECT, 4, &quot;Int&quot;)
      IconRIGHT:=NumGet(RECT, 8, &quot;Int&quot;), IconBOTTOM:=NumGet(RECT, 12, &quot;Int&quot;)
      IconLEFTAbs:=(IconLEFT+WinXPos), IconTOPAbs:=(IconTOP+WinYPos)
      If (fsState!=8 And RContains(IconLEFTAbs
                                 , IconTOPAbs
                                 , IconRIGHT-IconLEFT
                                 , IconBOTTOM-IconTOP
                                 , XPosAbs
                                 , YPosAbs))
         Break
   }
   DllCall(&quot;VirtualFreeEx&quot;, &quot;UInt&quot;, hProc
                          , &quot;UInt&quot;, pProc
                          , &quot;UInt&quot;, 0
                          , &quot;UInt&quot;, 0x8000)
   DllCall(&quot;VirtualFreeEx&quot;, &quot;UInt&quot;, hProc
                          , &quot;UInt&quot;, pRECT
                          , &quot;UInt&quot;, 0
                          , &quot;UInt&quot;, 0x8000)
   DllCall(&quot;CloseHandle&quot;, &quot;UInt&quot;, hProc)
   Result:=&quot;title: &quot;IconTooltip
       . &quot;`nname: &quot;IconProcName
       . &quot;`npid: &quot;IconPID
       . &quot;`nhwnd: &quot;Dec2Hex(hWnd)
   If TBType=1
   {
      If !WinTitle
         WinTitle:=&quot;no data&quot;
      If !WinControl
         WinControl:=&quot;no data&quot;
      If !WinControlGF
         WinControlGF:=&quot;no data&quot;
      Result.=&quot;`nadress: &quot;Dec2Hex(WinProcAdress)
            . &quot;`nclass: &quot;WinClass
            . &quot;, width: &quot;WinW &quot;, height: &quot;WinH
            . &quot;, x: &quot;WinX &quot;, y: &quot;WinY
            . &quot;`nctrl: &quot;WinControl
            . &quot;, width: &quot;ControlW &quot;, height: &quot;ControlH
            . &quot;, x: &quot;ControlX &quot;, y: &quot;ControlY
            . &quot;`nctrlgf: &quot;WinControlGF
   }
   If % A_OSVersion=&quot;WIN_7&quot; Or TBType=2
   {
    Result.=&quot;`nclass: &quot;IconClass
          . &quot;`niBitmap: &quot;iBitmap
          . &quot;`nidCommand: &quot;idCommand
          . &quot;`nfsState: &quot;fsState
          . &quot;`nfsStyle: &quot;fsStyle
          . &quot;`ndwData: &quot;Dec2Hex(dwData)
          . &quot;`niString: &quot;Dec2Hex(iString)
          . &quot;`nnMsg: &quot;nMsg
          . &quot;`nhIcon: &quot;Dec2Hex(hIcon)
   }
   Return, Result . &quot;`niconpos: left: &quot;IconLEFTAbs &quot;, top: &quot;IconTOPAbs
                  . &quot;, width: &quot;IconRIGHT &quot;, height: &quot;IconBOTTOM
                  . &quot;`npos: abs_x: &quot;XPosAbs &quot;, abs_y: &quot;YPosAbs
                  . &quot; (rel_x: &quot;XPosRel &quot;, rel_y: &quot;YPosRel &quot;)&quot;
                  . &quot;`ncolor: &quot;CurrentColor
                  . &quot; (&quot;Hex2Dec(CurrentColor)&quot;)&quot;
                  . &quot;`ninvcolor: 0x&quot;SubStr(Dec2Hex(CurrentColor ^ 0xFFFFFF), 5)
                  . &quot; (&quot;Hex2Dec(CurrentColor ^ 0xFFFFFF)&quot;)&quot;
}

RContains(X, Y, W, H, CX, CY) ; RECTANGLE.CONTAINS METHOD
{
   Return, ((((X&lt;=CX) And (CX&lt;(X+W))) And (Y&lt;=CY)) AND (CY&lt;(Y+H)))
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-12-11T19:57:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54480#p54480</id>
		</entry>
</feed>
