Sign in to follow this  
Followers 0
Docfxit

Control Viewer

9 posts in this topic

I just tried to run (Interactive) Control Viewer v1.1 with the changes mentioned by BrewManNH here:

I'm getting an error saying:

CV.au3" (2647) : ==> Duplicate function name.:
Func _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)

If I try to compile it I get this error:

CVCompileError.jpg

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Resources\CV.ico
#AutoIt3Wrapper_Outfile=CV.exe
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Dialog, 1000,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 162,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 164,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 169,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Menu, 166,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, VersionInfo, 1,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete "%out%", "%out%", 24, 1,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -add %out%, %out%, Resources\CV.res,,,
#AutoIt3Wrapper_Run_After=del CV_Obfuscated.au3
#AutoIt3Wrapper_Run_After=del Utilities\ResHacker.ini
#AutoIt3Wrapper_Run_After=del Utilities\ResHacker.log
#AutoIt3Wrapper_Run_Obfuscator=Y
#Obfuscator_Parameters=/striponly
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.6.1
    Author:         Yashied

    Script Function:
        (Control Viewer v1.1) AutoIt Window Information Tool

#ce ----------------------------------------------------------------------------

#Region Resources
;~#AutoIt3Wrapper_Run_After=Utilities\Upx.exe "%out%" --best --no-backup --overlay=copy --compress-exports=1 --compress-resources=0 --strip-relocs=1
#EndRegion Resources

#Region Initialization


#Include <Array.au3>
#Include <ComboConstants.au3>
#Include <Constants.au3>
#Include <GDIPlus.au3>
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <GUIEdit.au3>
#Include <GUIImageList.au3>
#Include <GUIListView.au3>
#Include <GUIMenu.au3>
#Include <GUITab.au3>
#Include <HeaderConstants.au3>
#Include <Math.au3>
#Include <StaticConstants.au3>
#Include <TabConstants.au3>

#Include <APIConstants.au3>
;~ #Include "UDFs\APIErrors.au3"
#Include "UDFs\ColorChooser.au3"
#Include <WinAPIEx.au3>

;~Opt('GUICloseOnESC', 0)
Opt('GUIResizeMode', BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
Opt('MustDeclareVars', 1)
Opt('WinTitleMatchMode', 3)
Opt('WinWaitDelay', 0)

Global Const $GUI_NAME = 'Control Viewer'
Global Const $GUI_VERSION = '1.1'
;~Global Const $GUI_UNIQUE = $GUI_NAME & '_' & $GUI_VERSION & '_CvrXp'
Global Const $GUI_UNIQUE = $GUI_NAME & '_CvrXp'

Global Const $REG_KEY_NAME = 'HKCU\Software\Y''s\' & $GUI_NAME

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173

Global Const $Style[31][2] = _
    [[0x00000004, 'DS_3DLOOK'], _
     [0x00000001, 'DS_ABSALIGN'], _
     [0x00000800, 'DS_CENTER'], _
     [0x00001000, 'DS_CENTERMOUSE'], _
     [0x00002000, 'DS_CONTEXTHELP'], _
     [0x00000400, 'DS_CONTROL'], _
     [0x00000008, 'DS_FIXEDSYS'], _
     [0x00000020, 'DS_LOCALEDIT'], _
     [0x00000080, 'DS_MODALFRAME'], _
     [0x00000010, 'DS_NOFAILCREATE'], _
     [0x00000100, 'DS_NOIDLEMSG'], _
     [0x00000040, 'DS_SETFONT'], _
     [0x00000200, 'DS_SETFOREGROUND'], _
     [0x00000002, 'DS_SYSMODAL'], _
     [0x00800000, 'WS_BORDER'], _
     [0x00C00000, 'WS_CAPTION'], _
     [0x40000000, 'WS_CHILD'], _
     [0x02000000, 'WS_CLIPCHILDREN'], _
     [0x04000000, 'WS_CLIPSIBLINGS'], _
     [0x08000000, 'WS_DISABLED'], _
     [0x00400000, 'WS_DLGFRAME'], _
     [0x00020000, 'WS_GROUP'], _
     [0x00100000, 'WS_HSCROLL'], _
     [0x01000000, 'WS_MAXIMIZE'], _
     [0x20000000, 'WS_MINIMIZE'], _
     [0x80000000, 'WS_POPUP'], _
     [0x00040000, 'WS_SIZEBOX'], _
     [0x00080000, 'WS_SYSMENU'], _
     [0x00010000, 'WS_TABSTOP'], _
     [0x10000000, 'WS_VISIBLE'], _
     [0x00200000, 'WS_VSCROLL']]

Global Const $ExStyle[21][2] = _
    [[0x00000010, 'WS_EX_ACCEPTFILES'], _
     [0x00040000, 'WS_EX_APPWINDOW'], _
     [0x00000200, 'WS_EX_CLIENTEDGE'], _
     [0x02000000, 'WS_EX_COMPOSITED'], _
     [0x00000400, 'WS_EX_CONTEXTHELP'], _
     [0x00010000, 'WS_EX_CONTROLPARENT'], _
     [0x00000001, 'WS_EX_DLGMODALFRAME'], _
     [0x00080000, 'WS_EX_LAYERED'], _
     [0x00400000, 'WS_EX_LAYOUTRTL'], _
     [0x00004000, 'WS_EX_LEFTSCROLLBAR'], _
     [0x00000040, 'WS_EX_MDICHILD'], _
     [0x08000000, 'WS_EX_NOACTIVATE'], _
     [0x00100000, 'WS_EX_NOINHERITLAYOUT'], _
     [0x00000004, 'WS_EX_NOPARENTNOTIFY'], _
     [0x00001000, 'WS_EX_RIGHT'], _
     [0x00002000, 'WS_EX_RTLREADING'], _
     [0x00020000, 'WS_EX_STATICEDGE'], _
     [0x00000080, 'WS_EX_TOOLWINDOW'], _
     [0x00000008, 'WS_EX_TOPMOST'], _
     [0x00000020, 'WS_EX_TRANSPARENT'], _
     [0x00000100, 'WS_EX_WINDOWEDGE']]

Global $_XPos = 8 ; ((-1) - Default)
Global $_YPos = 8 ; ((-1) - Default)
;~Global $_About = 0 ; (1/0)
Global $_Width = 421
Global $_Height = 653
Global $_Top = 1 ; (0/1)
Global $_Position = 0 ; (0 - Absolute; 1 - Window; 2 - Client; 3 - Control)
Global $_Color = 0 ; (0 - RGB; 1 - BGR)
Global $_Crosshair = 1 ; (0/1)
Global $_Highlight = 1 ; (0/1)
Global $_Frame = 0xFF0000
Global $_Alpha = 192
Global $_Fade = 1 ; (0/1)
Global $_Code = 1 ; (0 - ANSI; 1 - Unicode; 2 - Unicode (Big Endian); 3 - UTF8)
Global $_Icon = 1 ; (0/1)
Global $_Tab = 0 ; (0 - Window; 1 - Control; 2 - Capture; 3 - AutoIt)
Global $_Rgb[3] = [0x000000, 0x9C9C9C, 0xE00000] ; (Visible, Hidden, Missing)
Global $_Column[11] = [98 + 48 * @AutoItX64, 176 - 48 * @AutoItX64, 38, 44, 124, 44, 82 + 48 * @AutoItX64, 124, 140, 60, 267] ; (Handle, Class, NN, ID | Process, PID, Handle, Class, Title, Version, Path)
Global $_Crop[2] = [349, 223] ; (Width, Height)
Global $_Capture = 0 ; (0/1)
Global $_All = 0 ; (0/1)

_ApplicationCheck()
_ReadRegistry()

Global $hWnd[2], $hForm, $hFrame, $hPopup = 0
Global $hPic[2], $hHeader[2], $hTab, $hAutoIt, $hListView, $hIL, $Combo[2], $Dummy[7], $Group, $Icon[2], $Input[31], $Label[5], $Menu[21], $Pic, $Tab
Global $Accel[5][2] = [['^a'], ['^d'], ['^!t'], ['^!h'], ['{ENTER}']]
Global $Col[2] = [0xFF000000, 0]
Global $hCursor[8], $hBitmap, $hAbout = 0, $hRoot = 0, $hOver = 0, $hPrev = 0, $hRect = 0, $hDesktop = 0
Global $Browser = False, $Ctrl = False, $Enum = False, $Fade = False, $Hold = False, $Refresh = False
Global $Count, $Data, $ID, $Item, $Key, $List, $Msg, $Alpha = 0, $Area = 0, $Resize = -1
Global $dX, $dY, $Xi, $Yi, $Xk, $Yk, $Xn, $Yn, $Xp, $Yp, $Ci, $Cp, $Wp, $Hp
Global $hFile, $hInstance = _WinAPI_GetModuleHandle(0)
Global $PathDlg = @WorkingDir
Global $tPoint, $tRect

If Not @compiled Then
    For $i = 0 To 7
        $hCursor[$i] = _WinAPI_LoadCursorFromFile(@ScriptDir & '\Resources\' & (100 + $i) & '.cur')
    Next
Else
    For $i = 0 To 7
        $hCursor[$i] = _WinAPI_LoadCursor($hInstance, 100 + $i)
    Next
EndIf
If _WinAPI_IsThemeActive() Then
    $Col[0] = 0xFF3E60C5
    $Col[1] = 0x1E3E60C5
EndIf
If _WinAPI_GetSystemMetrics($SM_SWAPBUTTON) Then
    $Key = 0x02
Else
    $Key = 0x01
EndIf

_GDIPlus_Startup()
;~_About()
_GUICreate()

OnAutoItExitRegister('AutoItExit')

#EndRegion Initialization

#Region Body

While 1
    If (($hRoot) And (Not _WinAPI_IsWindowVisible($hRoot))) Then
        _ShowFrame(0)
        _Update(1)
        $hRoot = 0
        $hOver = 0
    EndIf
    If (($hOver) And (Not _WinAPI_IsWindowVisible($hOver))) Or (($hRect) And (Not  WinActive($hForm))) Then
        _ShowFrame(0)
        $hOver = 0
    EndIf
    If _IsDown(0x11) Then
        If Not $Ctrl Then
            _SendMessage($hForm, $WM_SETCURSOR)
        EndIf
        $Ctrl = 1
    Else
        If $Ctrl Then
            _SendMessage($hForm, $WM_SETCURSOR)
        EndIf
        $Ctrl = 0
    EndIf
    $Msg = GUIGetMsg()
    Switch $Msg
        Case 0
            ContinueLoop
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Icon[0]
            _ShowFrame(0)
            _WinAPI_SetFocus($hListView)
            If Not @compiled Then
                GUICtrlSetImage($Icon[0], @ScriptDir & '\Resources\201.ico')
            Else
                GUICtrlSetImage($Icon[0], @ScriptFullPath, 201)
            EndIf
            $Browser = 1
            $Xp = -1
            $Yp = -1
            $Cp = -1
            $hRoot = 0
            $hOver = 0
            $hPrev = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, $IDI_APPLICATION))
            If $hPrev Then
                _WinAPI_SetSystemCursor($hCursor[0], $IDI_APPLICATION, 1)
            EndIf
            Opt('GUIOnEventMode', 1)
            GUISetState(@SW_DISABLE, $hForm)
            While _IsDown($Key)
;~              If $hRect Then
;~                  WinSetOnTop($hFrame, '', 1)
;~              EndIf
;~              Sleep(1)
                $tPoint = _WinAPI_GetMousePos()
                $Xi = DllStructGetData($tPoint, 1)
                $Yi = DllStructGetData($tPoint, 2)
                If $Fade Then
                    $Ci = -1
                EndIf
                If ($Xi <> $Xp) Or ($Yi <> $Yp) Or ($Ci <> $Cp) Then
                    $hBitmap = _Capture_X3($Xi - 11, $Yi - 11, 23, 23, 69, 69)
                    $Ci = @extended
                    If $hBitmap Then
                        If $Ci <> $Cp Then
                            GUICtrlSetBkColor($Label[0], $Ci)
                            Switch $_Color
                                Case 0 ; RGB
                                    $Data = $Ci
                                Case 1 ; BGR
                                    $Data = _WinAPI_SwitchColor($Ci)
                            EndSwitch
                            GUICtrlSetData($Input[2], '0x' & Hex($Data, 6))
                        EndIf
                    Else
                        If $Ci <> $Cp Then
                            GUICtrlSetBkColor($Label[0], _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
                            GUICtrlSetData($Input[2], '')
                        EndIf
                    EndIf
                    _SetBitmap($hPic[0], $hBitmap)
                    If $_Capture Then
                        _SetBitmap($hPic[1], _Capture_X1($Xi - Floor(($_Crop[0] - 10) / 2), $Yi - Floor(($_Crop[1] - 10) / 2), $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], 0, 1), 1)
                        If BitAND(GUICtrlGetState($Label[4]), $GUI_SHOW) Then
                            GUICtrlSetState($Label[4], $GUI_HIDE)
                        EndIf
                    EndIf
                    $Xp = $Xi
                    $Yp = $Yi
                    $Cp = $Ci
                EndIf
                $hWnd[0] = _WinAPI_GetAncestor(_WinAPI_WindowFromPoint($tPoint), $GA_ROOT)
                Switch $_Position
                    Case 0 ; Absolute
                        For $i = 0 To 1
                            _SetData($Input[$i], DllStructGetData($tPoint, $i + 1))
                        Next
                    Case 1, 2 ; Window, Client
                        If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                            If _WinAPI_IsWindow($hRoot) Then
                                $Data = $hRoot
                            Else
                                $Data = 0
                            EndIf
                        Else
                            $Data = $hWnd[0]
                        EndIf
                        If $Data Then
                            Switch $_Position
                                Case 1 ; Window
                                    $tRect = _WinAPI_GetWindowRect($Data)
                                Case 2 ; Client
                                    $tRect = _WinAPI_GetClientRect($Data)
                                    If _WinAPI_ScreenToClient($Data, $tRect) Then
                                        For $i = 1 To 2
                                            DllStructSetData($tRect, $i + 2, DllStructGetData($tRect, $i + 2) - DllStructGetData($tRect, $i))
                                            DllStructSetData($tRect, $i, -DllStructGetData($tRect, $i))
                                        Next
                                    Else
                                        $tRect = 0
                                    EndIf
                            EndSwitch
                        Else
                            $tRect = 0
                        EndIf
;~                      If True Then
                            If _PtInRect($tRect, $tPoint) Then
                                For $i = 0 To 1
                                    _SetData($Input[$i], DllStructGetData($tPoint, $i + 1) - DllStructGetData($tRect, $i + 1))
                                Next
                            Else
                                For $i = 0 To 1
                                    _SetData($Input[$i], '')
                                Next
                            EndIf
;~                      EndIf
                    Case 3 ; Control
                        If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                            If $hOver Then
                                $tRect = _WinAPI_GetWindowRect($hOver)
                            Else
                                $tRect = 0
                            EndIf
                            If _PtInRect($tRect, $tPoint) Then
                                For $i = 0 To 1
                                    _SetData($Input[$i], DllStructGetData($tPoint, $i + 1) - DllStructGetData($tRect, $i + 1))
                                Next
                            Else
                                For $i = 0 To 1
                                    _SetData($Input[$i], '')
                                Next
                            EndIf
                        EndIf
                EndSwitch
                If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                    If ($hOver) And (Not _WinAPI_IsWindowVisible($hOver)) Then
                        If $hRect Then
                            _ShowFrame(0)
                        EndIf
                        $Xp = -1
                        $Yp = -1
                        $Cp = -1
                    EndIf
                    ContinueLoop
                EndIf
                $hWnd[1] = 0
                $List = _WinAPI_EnumChildWindows($hWnd[0], 0)
                If @error Then
                    $Count = 0
                Else
                    $Count = $List[0][0]
                    For $i = $Count To 1 Step -1
                        If Not _WinAPI_IsWindowVisible($List[$i][0]) Then
                            ContinueLoop
                        EndIf
                        $tRect = _WinAPI_GetWindowRect($List[$i][0])
                        If _PtInRect($tRect, $tPoint) Then
                            $hWnd[1] = $List[$i][0]
                            ExitLoop
                        EndIf
                    Next
                EndIf
                Switch $_Position
                    Case 0, 1, 2 ; Absolute, Window, Client

                    Case 3 ; Control
                        If $hWnd[1] Then
                            For $i = 0 To 1
                                _SetData($Input[$i], DllStructGetData($tPoint, $i + 1) - DllStructGetData($tRect, $i + 1))
                            Next
                        Else
                            For $i = 0 To 1
                                _SetData($Input[$i], '')
                            Next
                        EndIf
                EndSwitch
                If ($hWnd[0] = $hRoot) And ($hWnd[1] = $hOver) Then
                    ContinueLoop
                EndIf
                If ($hWnd[0] = $hRoot) Then
;~                  _SetWindowInfo($hWnd[0], 1)
                Else
                    _SetWindowInfo($hWnd[0])
                EndIf
                _GUICtrlListView_BeginUpdate($hListView)
                If ($hWnd[0] = $hRoot) And (_GUICtrlListView_GetItemCount($hListView) = $Count) Then
                    $Item = _GUICtrlListView_FindText($hListView, $hWnd[1], -1, 0)
;~                  If ($hWnd[1]) And ($Item = -1) Then

;~                  EndIf
                Else
                    $Enum = 1
                    _GUICtrlListView_DeleteAllItems($hListView)
                    $Item = -1
                    For $i = 1 To $Count
                        _GUICtrlListView_AddItem($hListView, $List[$i][0])
                        _GUICtrlListView_AddSubItem($hListView, $i - 1, $List[$i][1], 1)
;~                      _GUICtrlListView_AddSubItem($hListView, $i - 1, StringLeft(ControlGetText($hWnd[0], '', $List[$i][0]), 80), 4)
                        $ID = _WinAPI_GetDlgCtrlID($List[$i][0])
                        If $ID > 0 Then
                            _GUICtrlListView_AddSubItem($hListView, $i - 1, $ID, 3)
                        EndIf
                    Next
                    For $i = 1 To $Count
                        If ($List[$i][0] = $hWnd[1]) Then
                            $Item = $i - 1
                        EndIf
                        If ($List[$i][1]) And (IsString($List[$i][1])) Then
                            $ID = 1
                            $Data = $List[$i][1]
                            For $j = $i To UBound($List) - 1
                                If $List[$j][1] = $Data Then
                                    $List[$j][1] = $ID
                                    $ID += 1
                                EndIf
                            Next
                        EndIf
                    Next
                    For $i = 1 To $Count
                        _GUICtrlListView_AddSubItem($hListView, $i - 1, $List[$i][1], 2)
                        If _WinAPI_IsWindowVisible($List[$i][0]) Then
                            _GUICtrlListView_SetItemChecked($hListView, $i - 1)
                        EndIf
                    Next
                    $Enum = 0
                EndIf
                If $Item = -1 Then
                    $Item = _GUICtrlListView_GetSelectedIndices($hListView)
                    If $Item  Then
                        _GUICtrlListView_SetItemSelected($hListView, $Item, 0, 0)
                        _GUICtrlListView_SetItemFocused($hListView, $Item, 0)
                    EndIf
                    _SetControlInfo(0)
                Else
                    _GUICtrlListView_SetItemSelected($hListView, $Item, 1, 1)
                    _GUICtrlListView_EnsureVisible($hListView, $Item, 1)
                EndIf
                _GUICtrlListView_EndUpdate($hListView)
                If $hWnd[1] Then
                    _ShowFrame(1, $tRect, $hWnd[0])
                Else
                    _ShowFrame(0)
                EndIf
                $hRoot = $hWnd[0]
                $hOver = $hWnd[1]
            WEnd
            If $hDesktop Then
                _WinAPI_DeleteObject($hDesktop)
            EndIf
            $hDesktop = _Capture_Desktop()
            If Not $_Capture Then
                _SetBitmap($hPic[1], _Capture_X1($Xp - Floor(($_Crop[0] - 10) / 2), $Yp - Floor(($_Crop[1] - 10) / 2), $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], 0, 1), 1)
                If BitAND(GUICtrlGetState($Label[4]), $GUI_SHOW) Then
                    GUICtrlSetState($Label[4], $GUI_HIDE)
                EndIf
            EndIf
            _ShowFrame(0)
            If $hPrev Then
                _WinAPI_SetSystemCursor($hPrev, $IDI_APPLICATION, 1)
            EndIf
            $hPrev = 0
            $hOver = 0
            $Browser = 0
            If Not @compiled Then
                GUICtrlSetImage($Icon[0], @ScriptDir & '\Resources\202.ico')
            Else
                GUICtrlSetImage($Icon[0], @ScriptFullPath, 202)
            EndIf
            GUISetState(@SW_ENABLE, $hForm)
            Opt('GUIOnEventMode', 0)
            WinActivate($hForm)
            If Not FileExists(GUICtrlRead($Input[15])) Then
                GUICtrlSetState($Icon[1], $GUI_DISABLE)
            Else
                GUICtrlSetState($Icon[1], $GUI_ENABLE)
            EndIf
            If Not $hRoot Then
                GUICtrlSetState($Menu[0], $GUI_DISABLE)
            Else
                GUICtrlSetState($Menu[0], $GUI_ENABLE)
            EndIf
        Case $Icon[1]
            $Data = GUICtrlRead($Input[15])
            If $Data Then
                _WinAPI_ShellOpenFolderAndSelectItems($Data)
;~              If @error Then

;~              EndIf
            EndIf
        Case $Dummy[0]
            $Data = GUICtrlRead($Dummy[0])
            If Not _GUICtrlListView_GetSelectedIndices($hListView) Then
                _GUICtrlListView_SetItemSelected($hListView, $Data, 1, 1)
            EndIf
        Case $Dummy[1]
            $Data = GUICtrlRead($Dummy[1])
            $Data = Ptr(_GUICtrlListView_GetItemText($hListView, $Data))
            If ($Data) And (_WinAPI_IsWindow($Data)) Then
                _SetControlInfo($Data)
;~          Else
;~              _SetControlInfo(0)
            EndIf
        Case $Dummy[2]
            If Not _GetCursor($Xi, $Yi, $hForm) Then
                ContinueLoop
            EndIf
            $ID = _IsCrop($Xi, $Yi, $dX, $dY)
            Switch $ID
                Case 0
                    If (Not $hDesktop) Or (Not _IsDown(0x11)) Then
                        ContinueLoop
                    EndIf
                    $Xk = Default
                    $Yk = Default
                    $Xn = $Xp
                    $Yn = $Yp
                    $dX = $Xi
                    $dY = $Yi
                    $Resize = 2
                Case 1, 5
                    $Resize = 3
                Case 2, 6
                    $Resize = 4
                Case 3, 7
                    $Resize = 5
                Case 4, 8
                    $Resize = 6
                Case Else
                    ContinueLoop
            EndSwitch
            $Wp = 0
            $Hp = 0
            Opt('GUIOnEventMode', 1)
            While _IsDown($Key)
;~              Sleep(1)
                If Not _GetCursor($Xi, $Yi, $hForm) Then
                    ContinueLoop
                EndIf
                Switch $ID
                    Case 0
                        $Xp = $Xn - $Xi + $dX
                        $Yp = $Yn - $Yi + $dY
                    Case 1
                        If $Xi - $dX < 38  Then
                            $Xi = 38  + $dX
                        EndIf
                        If $Xi - $dX > 191 Then
                            $Xi = 191 + $dX
                        EndIf
                        If $Yi - $dY < 173 Then
                            $Yi = 173 + $dY
                        EndIf
                        If $Yi - $dY > 263 Then
                            $Yi = 263 + $dY
                        EndIf
                        $_Crop[0] = 349 - 2 * ($Xi - $dX - 38 )
                        $_Crop[1] = 223 - 2 * ($Yi - $dY - 173)
                    Case 2
                        If $Yi - $dY < 173 Then
                            $Yi = 173 + $dY
                        EndIf
                        If $Yi - $dY > 263 Then
                            $Yi = 263 + $dY
                        EndIf
                        $_Crop[1] = 223 - 2 * ($Yi - $dY - 173)
                    Case 3
                        If $Xi - $dX < 229 Then
                            $Xi = 229 + $dX
                        EndIf
                        If $Xi - $dX > 382 Then
                            $Xi = 382 + $dX
                        EndIf
                        If $Yi - $dY < 173 Then
                            $Yi = 173 + $dY
                        EndIf
                        If $Yi - $dY > 263 Then
                            $Yi = 263 + $dY
                        EndIf
                        $_Crop[0] = 349 + 2 * ($Xi - $dX - 382)
                        $_Crop[1] = 223 - 2 * ($Yi - $dY - 173)
                    Case 4
                        If $Xi - $dX < 229 Then
                            $Xi = 229 + $dX
                        EndIf
                        If $Xi - $dX > 382 Then
                            $Xi = 382 + $dX
                        EndIf
                        $_Crop[0] = 349 + 2 * ($Xi - $dX - 382)
                    Case 5
                        If $Xi - $dX < 229 Then
                            $Xi = 229 + $dX
                        EndIf
                        If $Xi - $dX > 382 Then
                            $Xi = 382 + $dX
                        EndIf
                        If $Yi - $dY < 301 Then
                            $Yi = 301 + $dY
                        EndIf
                        If $Yi - $dY > 391 Then
                            $Yi = 391 + $dY
                        EndIf
                        $_Crop[0] = 349 + 2 * ($Xi - $dX - 382)
                        $_Crop[1] = 223 + 2 * ($Yi - $dY - 391)
                    Case 6
                        If $Yi - $dY < 301 Then
                            $Yi = 301 + $dY
                        EndIf
                        If $Yi - $dY > 391 Then
                            $Yi = 391 + $dY
                        EndIf
                        $_Crop[1] = 223 + 2 * ($Yi - $dY - 391)
                    Case 7
                        If $Xi - $dX < 38  Then
                            $Xi = 38  + $dX
                        EndIf
                        If $Xi - $dX > 191 Then
                            $Xi = 191 + $dX
                        EndIf
                        If $Yi - $dY < 301 Then
                            $Yi = 301 + $dY
                        EndIf
                        If $Yi - $dY > 391 Then
                            $Yi = 391 + $dY
                        EndIf
                        $_Crop[0] = 349 - 2 * ($Xi - $dX - 38 )
                        $_Crop[1] = 223 + 2 * ($Yi - $dY - 391)
                    Case 8
                        If $Xi - $dX < 38  Then
                            $Xi = 38  + $dX
                        EndIf
                        If $Xi - $dX > 191 Then
                            $Xi = 191 + $dX
                        EndIf
                        $_Crop[0] = 349 - 2 * ($Xi - $dX - 38 )
                EndSwitch
                Switch $ID
                    Case 0

                    Case 1, 3, 5, 7
                        If _IsDown(0x10) Then
                            If $_Crop[0] > $_Crop[1] Then
                                $_Crop[0] = $_Crop[1]
                            Else
                                $_Crop[1] = $_Crop[0]
                            EndIf
                        EndIf
                EndSwitch
                If ($Xp <> $Xk) Or ($Yp <> $Yk) Or ($Wp <> $_Crop[0]) Or ($Hp <> $_Crop[1]) Then
                    If $hDesktop Then
                        $hBitmap = _Capture_X1($Xp - Floor(($_Crop[0] - 10) / 2), $Yp - Floor(($_Crop[1] - 10) / 2), $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], 0, 1, 0, $hDesktop)
                    Else
                        $hBitmap = _Capture_X1(0, 0, $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], $Col[1], 0, 0)
                        If $_Crop[0] - 10 < 187 Then
                            If BitAND(GUICtrlGetState($Label[4]), $GUI_SHOW) Then
                                GUICtrlSetState($Label[4], $GUI_HIDE)
                            EndIf
                        Else
                            If BitAND(GUICtrlGetState($Label[4]), $GUI_HIDE) Then
                                GUICtrlSetState($Label[4], $GUI_SHOW)
                            EndIf
                        EndIf
                    EndIf
                    $tPoint = _WinAPI_CreatePoint(36 + Floor((349 - $_Crop[0]) / 2), 171 + Floor((223 - $_Crop[1]) / 2))
                    _WinAPI_ClientToScreen($hForm, $tPoint)
                    $Xi = DllStructGetData($tPoint, 1)
                    $Yi = DllStructGetData($tPoint, 2)
                    If Not $hPopup Then
                        $hPopup = GUICreate('', 100, 100, $Xi, $Yi, BitOR($WS_DISABLED, $WS_POPUP), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $hForm)
                        GUISetState(@SW_SHOWNOACTIVATE, $hPopup)
                        Switch $ID
                            Case 0

                            Case Else
                                GUICtrlSetState($Pic, $GUI_HIDE)
                        EndSwitch
                    EndIf
                    _WinAPI_UpdateLayeredWindowEx($hPopup, $Xi, $Yi, $hBitmap, 255, 1)
;~                  _WinAPI_DeleteObject($hBitmap)
                    $Wp = $_Crop[0]
                    $Hp = $_Crop[1]
                    $Xk = $Xp
                    $Yk = $Yp
                EndIf
            WEnd
            Opt('GUIOnEventMode', 0)
            GUICtrlSetPos($Pic, 36 + Floor((349 - $_Crop[0]) / 2), 171 + Floor((223 - $_Crop[1]) / 2), $_Crop[0], $_Crop[1])
            If $hDesktop Then
                _SetBitmap($hPic[1], _Capture_X1($Xp - Floor(($_Crop[0] - 10) / 2), $Yp - Floor(($_Crop[1] - 10) / 2), $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], 0, 1, 0, $hDesktop), 1)
            Else
                _SetBitmap($hPic[1], _Capture_X1(0, 0, $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], $Col[1]), 1)
            EndIf
            Switch $ID
                Case 0

                Case Else
                    GUICtrlSetState($Pic, $GUI_SHOW)
            EndSwitch
            GUIDelete($hPopup)
            $hPopup = 0
            $Resize =-1
;~          If True Then
                _SendMessage($hForm, $WM_SETCURSOR)
;~          EndIf
        Case $Dummy[3]
            If Not _ShellSaveDlg($hForm) Then
                MsgBox(16, $GUI_NAME, 'Unable to save image.', 0, $hForm)
            EndIf
        Case $Dummy[4]
            $Data = _GUICtrlListView_GetSelectedIndices($hAutoIt)
            If $Data Then
                $Data = _GUICtrlListView_GetItemText($hAutoIt, $Data, 6)
                If $Data Then
                    _WinAPI_ShellOpenFolderAndSelectItems($Data)
;~                  If @error Then

;~                  EndIf
                EndIf
            EndIf
        Case $Dummy[5]
            $Data = _GUICtrlListView_GetSelectedIndices($hAutoIt)
            If $Data Then
                $Data = _GUICtrlListView_GetItemText($hAutoIt, $Data, 1)
                If $Data Then
                    If _ShellKillProcess($Data, $hForm) Then
                        _SetAutoItInfo()
                    EndIf
                EndIf
            EndIf
        Case $Dummy[6]
            _SetAutoItInfo()
        Case $Combo[0]
            $Data = _GUICtrlComboBox_GetCurSel($Combo[0])
            If $Data <> $_Position Then
                $_Position = $Data
                For $i = 0 To 1
                    GUICtrlSetData($Input[$i], '')
                Next
            EndIf
        Case $Combo[1]
            $Data = _GUICtrlComboBox_GetCurSel($Combo[1])
            If $Data <> $_Color Then
                $_Color = $Data
                $Data = GUICtrlRead($Input[2])
                If $Data Then
                    GUICtrlSetData($Input[2], '0x' & Hex(_WinAPI_SwitchColor(Number($Data)), 6))
                EndIf
            EndIf
        Case $Label[1]
            $Data = _ColorChooserDialog($_Rgb[0], $hForm, 0, 0, BitOR($CC_FLAG_SOLIDCOLOR, $CC_FLAG_CAPTURECOLOR))
            If ($Data <> -1) And ($Data <> $_Rgb[0]) Then
                $_Rgb[0] = $Data
                GUICtrlSetBkColor($Label[1], $Data)
;~              If True Then
                    _WinAPI_InvalidateRect($hListView)
;~              EndIf
                If $_Tab = 3 Then
                    _WinAPI_InvalidateRect($hAutoIt)
                EndIf
            EndIf
        Case $Label[2]
            $Data = _ColorChooserDialog($_Rgb[1], $hForm, 0, 0, BitOR($CC_FLAG_SOLIDCOLOR, $CC_FLAG_CAPTURECOLOR))
            If ($Data <> -1) And ($Data <> $_Rgb[1]) Then
                $_Rgb[1] = $Data
                GUICtrlSetBkColor($Label[2], $Data)
;~              If True Then
                    _WinAPI_InvalidateRect($hListView)
;~              EndIf
                If $_Tab = 3 Then
                    _WinAPI_InvalidateRect($hAutoIt)
                EndIf
            EndIf
        Case $Label[3]
            $Data = _ColorChooserDialog($_Rgb[2], $hForm, 0, 0, BitOR($CC_FLAG_SOLIDCOLOR, $CC_FLAG_CAPTURECOLOR))
            If ($Data <> -1) And ($Data <> $_Rgb[2]) Then
                $_Rgb[2] = $Data
                GUICtrlSetBkColor($Label[3], $Data)
;~              If True Then
                    _WinAPI_InvalidateRect($hListView)
;~              EndIf
                If $_Tab = 3 Then
                    _WinAPI_InvalidateRect($hAutoIt)
                EndIf
            EndIf
        Case $Menu[1 ] ; "Copy To Clipboard"
            $Data = _CreateReport()
            If $Data Then
                ClipPut($Data)
            EndIf
        Case $Menu[2 ] ; "Save As..."
            If Not _ShellReportDlg($hForm) Then
                MsgBox(16, $GUI_NAME, 'Unable to save report.', 0, $hForm)
            EndIf
        Case $Menu[3 ] ; "Exit"
            Exit
        Case $Menu[4 ] ; "Always On Top"
            $_Top = Not $_Top
            If $_Top Then
                GUICtrlSetState($Menu[4 ], $GUI_CHECKED)
            Else
                GUICtrlSetState($Menu[4 ], $GUI_UNCHECKED)
            EndIf
            WinSetOnTop($hForm, '', $_Top)
        Case $Menu[5 ] ; "Crosshair"
            $_Crosshair = Not $_Crosshair
            If $_Crosshair Then
                GUICtrlSetState($Menu[5 ], $GUI_CHECKED)
            Else
                GUICtrlSetState($Menu[5 ], $GUI_UNCHECKED)
            EndIf
            GUICtrlSetBkColor($Label[0], _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
            GUICtrlSetData($Input[2], '')
            _SetBitmap($hPic[0], 0)
        Case $Menu[6 ] ; "Capture While Tracking"
            $_Capture = Not $_Capture
            If $_Capture Then
                GUICtrlSetState($Menu[6 ], $GUI_CHECKED)
            Else
                GUICtrlSetState($Menu[6 ], $GUI_UNCHECKED)
            EndIf
        Case $Menu[20]
            $_All = Not $_All
            If $_All Then
                GUICtrlSetState($Menu[20], $GUI_CHECKED)
            Else
                GUICtrlSetState($Menu[20], $GUI_UNCHECKED)
            EndIf
            _SetAutoItInfo()
        Case $Menu[7 ], $Menu[8 ], $Menu[9 ], $Menu[10] ; "ANSI", "Unicode", "Unicode (Big Endian)", "UTF8"
            If BitAND(GUICtrlRead($Msg), $GUI_CHECKED) Then
                ContinueLoop
            EndIf
            _SetData($Input[30], '')
            For $i = 7  To 10
                GUICtrlSetState($Menu[$i], $GUI_UNCHECKED)
            Next
            Switch $Msg
                Case $Menu[7 ]
                    $_Code = 0
                Case $Menu[8 ]
                    $_Code = 1
                Case $Menu[9 ]
                    $_Code = 2
                Case $Menu[10]
                    $_Code = 3
            EndSwitch
            GUICtrlSetState($Msg, $GUI_CHECKED)
        Case $Menu[8 ] ; "Unicode"
            _SetData($Input[30], '')
            $_Code = 1
        Case $Menu[9 ] ; "Unicode (Big Endian)"
            _SetData($Input[30], '')
            $_Code = 2
        Case $Menu[10] ; "UTF8"
            _SetData($Input[30], '')
            $_Code = 3
        Case $Menu[11] ; "Highlight Controls"
            _ShowFrame(0)
            $_Highlight = Not $_Highlight
            If $_Highlight Then
                GUICtrlSetState($Menu[11], $GUI_CHECKED)
                GUICtrlSetState($Menu[12], $GUI_ENABLE)
                GUICtrlSetState($Menu[17], $GUI_ENABLE)
                GUICtrlSetState($Menu[18], $GUI_ENABLE)
            Else
                GUICtrlSetState($Menu[11], $GUI_UNCHECKED)
                GUICtrlSetState($Menu[12], $GUI_DISABLE)
                GUICtrlSetState($Menu[17], $GUI_DISABLE)
                GUICtrlSetState($Menu[18], $GUI_DISABLE)
            EndIf
        Case $Menu[13], $Menu[14], $Menu[15], $Menu[16] ; "25%", "50%", 75%", "100%"
            If BitAND(GUICtrlRead($Msg), $GUI_CHECKED) Then
                ContinueLoop
            EndIf
            _ShowFrame(0)
            For $i = 13 To 16
                GUICtrlSetState($Menu[$i], $GUI_UNCHECKED)
            Next
            Switch $Msg
                Case $Menu[13]
                    $_Alpha = 64
                Case $Menu[14]
                    $_Alpha = 128
                Case $Menu[15]
                    $_Alpha = 192
                Case $Menu[16]
                    $_Alpha = 255
            EndSwitch
            GUICtrlSetState($Msg, $GUI_CHECKED)
        Case $Menu[17] ; "Fade In"
            $_Fade = Not $_Fade
            If $_Fade Then
                GUICtrlSetState($Menu[17], $GUI_CHECKED)
            Else
                GUICtrlSetState($Menu[17], $GUI_UNCHECKED)
            EndIf
        Case $Menu[18] ; "Color..."
            _ShowFrame(0)
            $Data = _ColorChooserDialog($_Frame, $hForm, 0, 0, BitOR($CC_FLAG_SOLIDCOLOR, $CC_FLAG_CAPTURECOLOR))
            If ($Data <> -1) And ($Data <> $_Frame) Then
                $_Frame = $Data
            EndIf
        Case $Menu[19] ; "About..."
            _ShellAboutDlg($hForm)
        Case $Accel[0][1] ; Ctrl+A
            _HK_SelectAll()
        Case $Accel[2][1] ; Ctrl+Alt+T
            _SendMessage($hForm, $WM_COMMAND, $Menu[4 ], 0)
        Case $Accel[3][1] ; Ctrl+Alt+H
            _SendMessage($hForm, $WM_COMMAND, $Menu[11], 0)
        Case $Accel[4][1]
            _HK_Edit()
        Case $Tab
            GUICtrlSetState($Tab, $GUI_FOCUS)
    EndSwitch
WEnd

#EndRegion Body

#Region Additional Functions

Func _About()
    If Not RegRead($REG_KEY_NAME, 'About') Then
        RegWrite($REG_KEY_NAME, 'About', 'REG_DWORD', 1)
;~      If True Then
            _ShellAboutDlg()
;~      EndIf
    EndIf
EndFunc   ;==>_About

Func _ApplicationCheck()

    Local $hWnd = WinGetHandle($GUI_UNIQUE)

    If Not $hWnd Then
        AutoItWinSetTitle($GUI_UNIQUE)
        Return
    EndIf

    Local $PID, $List

    $PID = WinGetProcess($hWnd)
    If $PID > -1 Then
        $List = _WinAPI_EnumProcessWindows($PID, 0)
        If Not IsArray($List) Then
            Exit
        EndIf
    EndIf
    For $i = 1 To $List[0][0]
        If WinGetTitle($List[$i][0]) = $GUI_NAME & ChrW(160) Then
            If BitAND(WinGetState($List[$i][0]), 4) Then
                WinActivate($List[$i][0])
            Else
                For $j = 1 To $List[0][0]
                    If (WinGetTitle($List[$j][0])) And (_WinAPI_GetAncestor($List[$j][0], $GA_ROOTOWNER) = $List[$i][0]) Then
                        WinActivate($List[$j][0])
                        ExitLoop
                    EndIf
                Next
            EndIf
            ExitLoop
        EndIf
    Next
    Exit
EndFunc   ;==>_ApplicationCheck

Func _Capture_X1($iX, $iY, $iWidth, $iHeight, $iColCrop, $iColFill = 0, $fCapture = 0, $fDib = 1, $hDesktop = 0)

    Local $hDC, $hSrcDC, $hDstDC, $hGraphics, $hCrop, $hScreen = 0, $hPen, $hBrush, $hBitmap, $tRect, $tData
    Local $W = $iWidth + 10, $H = $iHeight + 10, $Xc = Floor($W / 2), $Yc = Floor($H / 2)

    If $fCapture Then
        If $hDesktop Then
            $hDC = _WinAPI_GetDC(0)
            $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
            _WinAPI_SelectObject($hSrcDC, $hDesktop)
            $hDstDC = _WinAPI_CreateCompatibleDC($hDC)
            $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
            _WinAPI_SelectObject($hDstDC, $hBitmap)
            _WinAPI_BitBlt($hDstDC, 0, 0, $iWidth, $iHeight, $hSrcDC, $iX, $iY, $SRCCOPY)
            _WinAPI_ReleaseDC(0, $hDC)
            _WinAPI_DeleteDC($hSrcDC)
            _WinAPI_DeleteDC($hDstDC)
        Else
            $hDesktop = _WinAPI_GetDesktopWindow()
            $hDC = _WinAPI_GetDC($hDesktop)
            $hDstDC = _WinAPI_CreateCompatibleDC($hDC)
            $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
            _WinAPI_SelectObject($hDstDC, $hBitmap)
            _WinAPI_BitBlt($hDstDC, 0, 0, $iWidth, $iHeight, $hDC, $iX, $iY, $SRCCOPY)
            $hBrush = _WinAPI_CreateSolidBrush(0)
            $tRect = _WinAPI_GetWindowRect($hPic[0])
            _WinAPI_OffsetRect($tRect, -$iX, -$iY)
            _WinAPI_FillRect($hDstDC, DllStructGetPtr($tRect), $hBrush)
            If $_Tab = 2 Then
                $tRect = _WinAPI_GetWindowRect($hPic[1])
                _WinAPI_OffsetRect($tRect, -$iX, -$iY)
                _WinAPI_FillRect($hDstDC, DllStructGetPtr($tRect), $hBrush)
            EndIf
            _WinAPI_DeleteObject($hBrush)
            _WinAPI_ReleaseDC($hDesktop, $hDC)
            _WinAPI_DeleteDC($hDstDC)
        EndIf
        $hScreen = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
        _WinAPI_DeleteObject($hBitmap)
    EndIf
    $hBitmap = _GDIPlus_CreateBitmapFromScan0($W, $H)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
;~  _GDIPlus_GraphicsClear($hGraphics, 0)
    $hPen = _GDIPlus_PenCreate($iColCrop)
    _GDIPlus_GraphicsDrawRect($hGraphics, 0, 0, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, $Xc - 2, 0, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, $W - 5, 0, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, $W - 5, $Yc - 2, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, $W - 5, $H - 5, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, $Xc - 2, $H - 5, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, 0, $H - 5, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphics, 0, $Yc - 2, 4, 4, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, 5, 2, $Xc - 3, 2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $Xc + 3, 2, $W - 6, 2, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $W - 3, 5, $W - 3,  $Yc - 3, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $W - 3, $Yc + 3, $W - 3, $H - 6, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $W - 6, $H - 3, $Xc + 3, $H - 3, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, $Xc - 3, $H - 3, 5, $H - 3, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, 2, $H - 6, 2, $Yc + 3, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphics, 2, $Yc - 3, 2, 5, $hPen)
    _GDIPlus_PenDispose($hPen)
    If $fCapture Then
        _GDIPlus_GraphicsDrawImageRect($hGraphics, $hScreen, 5, 5, $iWidth, $iHeight)
        _GDIPlus_ImageDispose($hScreen)
    Else
        If $iColFill Then
            $hBrush = _GDIPlus_BrushCreateSolid($iColFill)
            _GDIPlus_GraphicsFillRect($hGraphics, 5, 5, $iWidth, $iHeight, $hBrush)
            _GDIPlus_BrushDispose($hBrush)
        EndIf
    EndIf
    _GDIPlus_GraphicsDispose($hGraphics)
    If $fDib Then
        $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $W, $H, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
        $hCrop = _WinAPI_CreateDIB($W, $H)
        _WinAPI_SetBitmapBits($hCrop, $W * $H * 4, DllStructGetData($tData, 'Scan0'))
        _GDIPlus_BitmapUnlockBits($hBitmap, $tData)
    Else
        $hCrop = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    EndIf
    _GDIPlus_ImageDispose($hBitmap)
    If $hCrop Then
        Return SetError(0, 0, $hCrop)
    Else
        Return SetError(1, 0, 0)
    EndIf
EndFunc   ;==>_Capture_X1

Func _Capture_X3($iX, $iY, $iSrcWidth, $iSrcHeight, $iDstWidth, $iDstHeight)

    Local $hDC, $hSrcDC, $hDstDC, $hDesktop, $hGraphics, $hBrush, $hImage, $hBitmap, $hScreen, $Rgb, $hPen = 0
    Local $Xc = Floor($iDstWidth / 2), $Yc = Floor($iDstHeight / 2)

    $hDesktop = _WinAPI_GetDesktopWindow()
    $hDC = _WinAPI_GetDC($hDesktop)
    $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
    $hScreen = _WinAPI_CreateCompatibleBitmap($hDC, $iSrcWidth, $iSrcHeight)
    _WinAPI_SelectObject($hSrcDC, $hScreen)
    _WinAPI_BitBlt($hSrcDC, 0, 0, $iSrcWidth, $iSrcHeight, $hDC, $iX, $iY, $SRCCOPY)
    $hBrush = _WinAPI_CreateSolidBrush(0)
    $tRect = _WinAPI_GetWindowRect($hPic[0])
    _WinAPI_OffsetRect($tRect, -$iX, -$iY)
    _WinAPI_FillRect($hSrcDC, DllStructGetPtr($tRect), $hBrush)
    If $_Tab = 2 Then
        $tRect = _WinAPI_GetWindowRect($hPic[1])
        _WinAPI_OffsetRect($tRect, -$iX, -$iY)
        _WinAPI_FillRect($hSrcDC, DllStructGetPtr($tRect), $hBrush)
    EndIf
    _WinAPI_DeleteObject($hBrush)
    $hDstDC = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iDstWidth, $iDstHeight)
    _WinAPI_SelectObject($hDstDC, $hBitmap)
    _WinAPI_SetStretchBltMode($hDstDC, $STRETCH_DELETESCANS)
    _WinAPI_StretchBlt($hDstDC, 0, 0, $iDstWidth, $iDstHeight, $hSrcDC, 0, 0, $iSrcWidth, $iSrcHeight, $SRCCOPY)
    _WinAPI_ReleaseDC($hDesktop, $hDC)
    _WinAPI_DeleteDC($hDstDC)
    _WinAPI_DeleteDC($hSrcDC)
    _WinAPI_DeleteObject($hScreen)
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    _WinAPI_DeleteObject($hBitmap)
    $Rgb = BitAND(_GDIPlus_BitmapGetPixel($hImage, $Xc, $Yc), 0x00FFFFFF)
    If $_Crosshair Then
        For $y = $Yc - 3 To $Yc + 3 Step 3
            For $x = $Xc - 3 To $Xc + 3 Step 3
                If (($Xc <> $x) Or ($Yc <> $y)) And (Not _IsDark(_GDIPlus_BitmapGetPixel($hImage, $x, $y))) Then
                    $hPen = _GDIPlus_PenCreate()
                    ExitLoop 2
                EndIf
            Next
        Next
        If Not $hPen Then
            $hPen = _GDIPlus_PenCreate(0xFFFFFFFF)
        EndIf
        $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
        _GDIPlus_GraphicsDrawLine($hGraphics, 0, $Yc, $Xc - 3, $Yc, $hPen)
        _GDIPlus_GraphicsDrawLine($hGraphics, $Xc + 3, $Yc, $iDstWidth, $Yc, $hPen)
        _GDIPlus_GraphicsDrawLine($hGraphics, $Xc, 0, $Xc, $Yc - 3, $hPen)
        _GDIPlus_GraphicsDrawLine($hGraphics, $Xc, $Yc + 3, $Xc, $iDstHeight, $hPen)
        _GDIPlus_GraphicsDrawRect($hGraphics, $Xc - 2, $Yc - 2, 4, 4, $hPen)
        _GDIPlus_PenDispose($hPen)
        _GDIPlus_GraphicsDispose($hGraphics)
    EndIf
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _GDIPlus_ImageDispose($hImage)
    If $hBitmap Then
        Return SetError(0, $Rgb, $hBitmap)
    Else
        Return SetError(1, -1, 0)
    EndIf
EndFunc   ;==>_Capture_X3

Func _Capture_Desktop()

    Local $hDC, $hMemDC, $hDesktop, $hBrush, $hBitmap, $tRect

    $hDesktop = _WinAPI_GetDesktopWindow()
    $hDC = _WinAPI_GetDC($hDesktop)
    $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, @DesktopWidth, @DesktopHeight)
    _WinAPI_SelectObject($hMemDC, $hBitmap)
    _WinAPI_BitBlt($hMemDC, 0, 0, @DesktopWidth, @DesktopHeight, $hDC, 0, 0, $SRCCOPY)
    $hBrush = _WinAPI_CreateSolidBrush(0)
    $tRect = _WinAPI_GetWindowRect($hPic[0])
    _WinAPI_FillRect($hMemDC, DllStructGetPtr($tRect), $hBrush)
    If $_Tab = 2 Then
        $tRect = _WinAPI_GetWindowRect($hPic[1])
        _WinAPI_FillRect($hMemDC, DllStructGetPtr($tRect), $hBrush)
    EndIf
    _WinAPI_DeleteObject($hBrush)
    _WinAPI_ReleaseDC($hDesktop, $hDC)
    _WinAPI_DeleteDC($hMemDC)
    If $hBitmap Then
        Return SetError(0, 0, $hBitmap)
    Else
        Return SetError(1, 0, 0)
    EndIf
EndFunc   ;==>_Capture_Desktop

Func _CreateReport()

    Local $Data[2], $Text = ''

    $Text &= '###AutoIt Control Viewer Report File###' & @CRLF
    $Text &= @CRLF
    $Text &= 'Environment' & @CRLF
    $Text &= '===========' & @CRLF
    $Text &= StringStripWS('System:   ' & _OSVersion(), 2) & @CRLF
    $Text &= 'Aero:     '
    If _WinAPI_GetVersion() >= 6.0 Then
        If _WinAPI_DwmIsCompositionEnabled() Then
            $Text &= 'Enabled'
        Else
            $Text &= 'Disabled'
        EndIf
    EndIf
    $Text &= @CRLF
    $Text &= @CRLF
    $Text &= 'Window' & @CRLF
    $Text &= '======' & @CRLF
    $Text &= StringStripWS('Title:    ' & GUICtrlRead($Input[3 ]), 2) & @CRLF
    $Text &= StringStripWS('Class:    ' & GUICtrlRead($Input[4 ]), 2) & @CRLF
    $Text &= StringStripWS('Style:    ' & GUICtrlRead($Input[5 ]), 2) & @CRLF
    $Text &= StringStripWS('ExStyle:  ' & GUICtrlRead($Input[7 ]), 2) & @CRLF
    $Text &= 'Position: '
    For $i = 0 To 1
        $Data[$i] = GUICtrlRead($Input[9  + $i])
    Next
    If ($Data[0]) And ($Data[1]) Then
        $Text &= $Data[0] & ', ' & $Data[1]
    EndIf
    $Text  = StringStripWS($Text, 2)
    $Text &= @CRLF
    $Text &= 'Size:     '
    For $i = 0 To 1
        $Data[$i] = GUICtrlRead($Input[11 + $i])
    Next
    If ($Data[0]) And ($Data[1]) Then
        $Text &= $Data[0] & ', ' & $Data[1]
    EndIf
    $Text  = StringStripWS($Text, 2)
    $Text &= @CRLF
    $Text &= StringStripWS('Handle:   ' & GUICtrlRead($Input[13]), 2) & @CRLF
    $Text &= StringStripWS('PID:      ' & GUICtrlRead($Input[14]), 2) & @CRLF
    $Text &= StringStripWS('Path:     ' & GUICtrlRead($Input[15]), 2) & @CRLF
    $Text &= @CRLF
    $Text &= 'Control' & @CRLF
    $Text &= '=======' & @CRLF
    $Text &= StringStripWS('Class:    ' & GUICtrlRead($Input[16]), 2) & @CRLF
    $Text &= StringStripWS('Instance: ' & GUICtrlRead($Input[17]), 2) & @CRLF
    $Text &= StringStripWS('ID:       ' & GUICtrlRead($Input[19]), 2) & @CRLF
    $Text &= StringStripWS('Style:    ' & GUICtrlRead($Input[21]), 2) & @CRLF
    $Text &= StringStripWS('ExStyle:  ' & GUICtrlRead($Input[23]), 2) & @CRLF
    $Text &= 'Position: '
    For $i = 0 To 1
        $Data[$i] = GUICtrlRead($Input[25 + $i])
    Next
    If ($Data[0]) And ($Data[1]) Then
        $Text &= $Data[0] & ', ' & $Data[1]
    EndIf
    $Text  = StringStripWS($Text, 2)
    $Text &= @CRLF
    $Text &= 'Size:     '
    For $i = 0 To 1
        $Data[$i] = GUICtrlRead($Input[27 + $i])
    Next
    If ($Data[0]) And ($Data[1]) Then
        $Text &= $Data[0] & ', ' & $Data[1]
    EndIf
    $Text  = StringStripWS($Text, 2)
    $Text &= @CRLF
    $Text &= StringStripWS('Handle:   ' & GUICtrlRead($Input[29]), 2) & @CRLF
    $Text &= StringStripWS('Text:     ' & GUICtrlRead($Input[30]), 2) & @CRLF

    Return $Text
EndFunc   ;==>_CreateReport

Func _GetCursor(ByRef $iX, ByRef $iY, $hWnd = 0)

;~  $hWnd = _HWnd($hWnd)
;~  If Not $hWnd Then
;~      Return
;~  EndIf

    Local $tPoint = _WinAPI_GetMousePos($hWnd, $hWnd)

    If @error Then
        Return SetError(1, 0, 0)
    EndIf

    $iX = DllStructGetData($tPoint, 1)
    $iY = DllStructGetData($tPoint, 2)

    Return 1
EndFunc   ;==>_GetCursor

Func _GetNN($hWnd)

    Local $List, $Text, $ID = 0

    $Text = _WinAPI_GetClassName($hWnd)
    If Not $Text Then
        Return -1
    EndIf
    $List = _WinAPI_EnumChildWindows(_WinAPI_GetAncestor($hWnd, $GA_ROOT), 0)
    If @error Then
        Return -1
    EndIf
    For $i = 1 To $List[0][0]
        If $List[$i][1] = $Text Then
            $ID += 1
        EndIf
        If $List[$i][0] = $hWnd Then
            ExitLoop
        EndIf
    Next
    If Not $ID Then
        Return -1
    EndIf
    Return $ID
EndFunc   ;==>_GetNN

Func _GetStyleString($iStyle, $fDialog = 1, $fExStyle = 0)

    Local $Data, $Text = ''

    If $fExStyle Then
        $Data = $ExStyle
    Else
        $Data = $Style
    EndIf
    For $i = 0 To UBound($Data) - 1
        If BitAND($iStyle, $Data[$i][0]) Then
            If (Not BitAND($Data[$i][0], 0xFFFF)) Or ($fDialog) Or ($fExStyle) Then
                $iStyle = BitAND($iStyle, BitNOT($Data[$i][0]))
                $Text &= $Data[$i][1] & ', '
            EndIf
        EndIf
    Next
    If $iStyle Then
        $Text = '0x' & Hex($iStyle, 8) & ', ' & $Text
    EndIf
    Return StringRegExpReplace($Text, ',\s\z', '')
EndFunc   ;==>_GetStyleString

Func _GUICreate()

    Local $Style = BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY, $WS_TABSTOP)
    Local $ID, $tData, $hIcon, $hImageList
    Local $Height = $_Height - 653

    ; Main Window
    $hForm = GUICreate($GUI_NAME & ChrW(160), $_Width, $_Height + _WinAPI_GetSystemMetrics($SM_CYMENU), $_XPos, $_YPos, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_TOPMOST * $_Top)

    ; Menu
    $ID = GUICtrlCreateMenu('&File')
    $Menu[0 ] = GUICtrlCreateMenu('&Report', $ID)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Menu[1 ] = GUICtrlCreateMenuItem('&Copy To Clipboard',$Menu[0])
    $Menu[2 ] = GUICtrlCreateMenuItem('Save &As...', $Menu[0])
    GUICtrlCreateMenuItem('', $ID)
    $Menu[3 ] = GUICtrlCreateMenuItem('E&xit', $ID)
    $ID = GUICtrlCreateMenu('&Options')
    $Menu[4 ] = GUICtrlCreateMenuItem('&Always On Top' & @TAB & 'Ctrl+Alt+T', $ID)
    If $_Top Then
        GUICtrlSetState(-1, $GUI_CHECKED)
    EndIf
    GUICtrlCreateMenuItem('', $ID)
    $Menu[5 ] = GUICtrlCreateMenuItem('C&rosshair', $ID)
    If $_Crosshair Then
        GUICtrlSetState(-1, $GUI_CHECKED)
    EndIf
    $Menu[6 ] = GUICtrlCreateMenuItem('Capture While &Tracking', $ID)
    If $_Capture Then
        GUICtrlSetState(-1, $GUI_CHECKED)
    EndIf
    GUICtrlCreateMenuItem('', $ID)
    $Menu[20] = GUICtrlCreateMenuItem('Show All', $ID)
    If $_All Then
        GUICtrlSetState(-1, $GUI_CHECKED)
    EndIf
    GUICtrlCreateMenuItem('', $ID)
    $Menu[10] = GUICtrlCreateMenu('Text &Encoding', $ID)
    $Menu[7 ] = GUICtrlCreateMenuItem('ANSI', $Menu[10], Default, 1)
    $Menu[8 ] = GUICtrlCreateMenuItem('Unicode', $Menu[10], Default, 1)
    $Menu[9 ] = GUICtrlCreateMenuItem('Unicode (Big Endian)', $Menu[10], Default, 1)
    $Menu[10] = GUICtrlCreateMenuItem('UTF8', $Menu[10], Default, 1)
    Switch $_Code
        Case 0
            GUICtrlSetState($Menu[7 ], $GUI_CHECKED)
        Case 1
            GUICtrlSetState($Menu[8 ], $GUI_CHECKED)
        Case 2
            GUICtrlSetState($Menu[9 ], $GUI_CHECKED)
        Case 3
            GUICtrlSetState($Menu[10], $GUI_CHECKED)
    EndSwitch
    $Menu[18] = GUICtrlCreateMenu('&Highlight', $ID)
    $Menu[11] = GUICtrlCreateMenuItem('&Highlight Controls' & @TAB & 'Ctrl+Alt+H', $Menu[18])
    If $_Highlight Then
        GUICtrlSetState(-1, $GUI_CHECKED)
    EndIf
    GUICtrlCreateMenuItem('', $Menu[18])
    $Menu[12] = GUICtrlCreateMenu('&Transparency', $Menu[18])
    If $_Highlight Then
        GUICtrlSetState(-1, $GUI_ENABLE)
    Else
        GUICtrlSetState(-1, $GUI_DISABLE)
    EndIf
    $Menu[13] = GUICtrlCreateMenuItem('25%', $Menu[12], Default, 1)
    $Menu[14] = GUICtrlCreateMenuItem('50%', $Menu[12], Default, 1)
    $Menu[15] = GUICtrlCreateMenuItem('75%', $Menu[12], Default, 1)
    $Menu[16] = GUICtrlCreateMenuItem('100%', $Menu[12], Default, 1)
    Switch $_Alpha
        Case 64
            GUICtrlSetState($Menu[13], $GUI_CHECKED)
        Case 128
            GUICtrlSetState($Menu[14], $GUI_CHECKED)
        Case 192
            GUICtrlSetState($Menu[15], $GUI_CHECKED)
        Case 255
            GUICtrlSetState($Menu[16], $GUI_CHECKED)
    EndSwitch
    $Menu[17] = GUICtrlCreateMenuItem('&Fade In', $Menu[18])
    If $_Highlight Then
        GUICtrlSetState(-1, BitOR($GUI_CHECKED * $_Fade, $GUI_UNCHECKED * (Not $_Fade), $GUI_ENABLE))
    Else
        GUICtrlSetState(-1, BitOR($GUI_CHECKED * $_Fade, $GUI_UNCHECKED * (Not $_Fade), $GUI_DISABLE))
    EndIf
    $Menu[18] = GUICtrlCreateMenuItem('&Color...', $Menu[18])
    If $_Highlight Then
        GUICtrlSetState(-1, $GUI_ENABLE)
    Else
        GUICtrlSetState(-1, $GUI_DISABLE)
    EndIf
    $ID = GUICtrlCreateMenu('&Help')
    $Menu[19] = GUICtrlCreateMenuItem('&About...', $ID)

    For $i = 0 To UBound($Dummy) - 1
        $Dummy[$i] = GUICtrlCreateDummy()
    Next

    ; Color Picker Group
    GUICtrlCreateGroup('Color Picker', 10, 7, 293, 104)
    GUICtrlCreatePic('', 22, 28, 71, 71, BitOR($GUI_SS_DEFAULT_PIC, $SS_SUNKEN))
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreatePic('', 23, 29, 69, 69)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $hPic[0] = GUICtrlGetHandle(-1)
    GUICtrlCreateLabel('X, Y:', 103, 32, 29, 14)
    $Input[0] = GUICtrlCreateInput('', 133, 29, 36, 19, $Style)
    $Input[1] = GUICtrlCreateInput('', 177, 29, 36, 19, $Style)
    $Combo[0] = GUICtrlCreateCombo('', 223, 28, 68, 21, $CBS_DROPDOWNLIST)
    _GUICtrlComboBox_AddString(-1, 'Absolute')
    _GUICtrlComboBox_AddString(-1, 'Window')
    _GUICtrlComboBox_AddString(-1, 'Client')
    _GUICtrlComboBox_AddString(-1, 'Control')
    _GUICtrlComboBox_SetCurSel(-1, $_Position)
    GUICtrlCreateLabel('Color:', 103, 57, 29, 14)
    $Input[2] = GUICtrlCreateInput('', 133, 54, 80, 19, $Style)
    $Combo[1] = GUICtrlCreateCombo('', 223, 53, 50, 21, $CBS_DROPDOWNLIST)
    _GUICtrlComboBox_AddString(-1, 'RGB')
    _GUICtrlComboBox_AddString(-1, 'BGR')
    _GUICtrlComboBox_SetCurSel(-1, $_Color)
    GUICtrlCreateLabel('Solid:', 103, 82, 29, 14)
    $Label[0] = GUICtrlCreateLabel('', 133, 79, 19, 19, $SS_SUNKEN)

    ; Browse Tool Group
    ;Old code gives error Duplicate function name
    ;GUICtrlCreateGroup('Browse Tool', 313, 7, 98, 104)
    ;$Icon[0] = GUICtrlCreateIcon('', 0, 330, 30, 64, 64)
    ;_SetStyle(-1, $WS_TABSTOP, 0)
    ;If Not @compiled Then
;       GUICtrlSetImage(-1, @ScriptDir & '\Resources\202.ico')
;   Else
;       GUICtrlSetImage(-1, @ScriptFullPath, 202)
;   EndIf
;New code written by BrewManNH
GUICtrlCreateGroup('Browse Tool', 313, 7, 98, 104)
If Not @Compiled Then
    $Icon[0] = GUICtrlCreateIcon(@ScriptDir & '\Resources\202.ico', 0, 330, 30, 64, 64)
Else
    $Icon[0] = GUICtrlCreateIcon(@ScriptFullPath, 202, 330, 30, 64, 64)
EndIf
_SetStyle(-1, $WS_TABSTOP, 0)
    ; Info Group
    If $_Icon Then
        $Tab = GUICtrlCreateTab(22, 136, 379, 273)
        _GUICtrlTab_SetMinTabWidth(-1, 75)
    Else
        $Tab = GUICtrlCreateTab(22, 136, 379, 273, BitOr($GUI_SS_DEFAULT_TAB, $TCS_FIXEDWIDTH))
        _GUICtrlTab_SetItemSize(-1, 64, 19)
    EndIf
    GUICtrlSetState(-1, $GUI_FOCUS)
    $hTab = GUICtrlGetHandle(-1)

    GUICtrlCreateTabItem('Window')
    GUICtrlCreateLabel('Title:', 33, 176, 46, 14)
    $Input[3] = GUICtrlCreateInput('', 80, 173, 308, 19, $Style)
    GUICtrlCreateLabel('Class:', 33, 201, 46, 14)
    $Input[4] = GUICtrlCreateInput('', 80, 198, 308, 19, $Style)
    GUICtrlCreateLabel('Style:', 33, 226, 46, 14)
    $Input[5] = GUICtrlCreateInput('', 80, 223, 80, 19, $Style)
    $Input[6] = GUICtrlCreateInput('', 168, 223, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0xAA0000)
    GUICtrlCreateLabel('ExStyle:', 33, 251, 46, 14)
    $Input[7] = GUICtrlCreateInput('', 80, 248, 80, 19, $Style)
    $Input[8] = GUICtrlCreateInput('', 168, 248, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0xAA0000)
    GUICtrlCreateLabel('Position:', 33, 276, 46, 14)
    $Input[9] = GUICtrlCreateInput('', 80, 273, 80, 19, $Style)
    $Input[10] = GUICtrlCreateInput('', 168, 273, 80, 19, $Style)
    GUICtrlCreateLabel('Size:', 33, 301, 46, 14)
    $Input[11] = GUICtrlCreateInput('', 80, 298, 80, 19, $Style)
    $Input[12] = GUICtrlCreateInput('', 168, 298, 80, 19, $Style)
    GUICtrlCreateLabel('Handle:', 33, 326, 46, 14)
    $Input[13] = GUICtrlCreateInput('', 80, 323, 168, 19, $Style)
    GUICtrlCreateLabel('PID:', 33, 351, 46, 14)
    $Input[14] = GUICtrlCreateInput('', 80, 348, 80, 19, $Style)
    GUICtrlCreateLabel('Path:', 33, 376, 46, 14)
    $Input[15] = GUICtrlCreateInput('', 80, 373, 289, 19, $Style)
    $Icon[1] = GUICtrlCreateIcon('', 0, 373, 375, 15, 15)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, 'Open file location')
    GUICtrlSetCursor(-1, 0)
    _SetStyle(-1, $WS_TABSTOP, 0)
    If Not @compiled Then
        GUICtrlSetImage(-1, @ScriptDir & '\Resources\210.ico')
    Else
        GUICtrlSetImage(-1, @ScriptFullPath, 210)
    EndIf

    GUICtrlCreateTabItem('Control')
    GUICtrlCreateLabel('Class:', 33, 176, 46, 14)
    $Input[16] = GUICtrlCreateInput('', 80, 173, 308, 19, $Style)
    GUICtrlCreateLabel('Instance:', 33, 201, 46, 14)
    $Input[17] = GUICtrlCreateInput('', 80, 198, 80, 19, $Style)
    $Input[18] = GUICtrlCreateInput('', 168, 198, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0x9999CC)
    GUICtrlCreateLabel('ID:', 33, 226, 42, 14)
    $Input[19] = GUICtrlCreateInput('', 80, 223, 80, 19, $Style)
    $Input[20] = GUICtrlCreateInput('', 168, 223, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0x9999CC)
    GUICtrlCreateLabel('Style:', 33, 251, 42, 14)
    $Input[21] = GUICtrlCreateInput('', 80, 248, 80, 19, $Style)
    $Input[22] = GUICtrlCreateInput('', 168, 248, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0xAA0000)
    GUICtrlCreateLabel('ExStyle:', 33, 276, 42, 14)
    $Input[23] = GUICtrlCreateInput('', 80, 273, 80, 19, $Style)
    $Input[24] = GUICtrlCreateInput('', 168, 273, 220, 19, $Style)
;~  GUICtrlSetColor(-1, 0xAA0000)
    GUICtrlCreateLabel('Position:', 33, 301, 42, 14)
    $Input[25] = GUICtrlCreateInput('', 80, 298, 80, 19, $Style)
    $Input[26] = GUICtrlCreateInput('', 168, 298, 80, 19, $Style)
    GUICtrlCreateLabel('Size:', 33, 326, 42, 14)
    $Input[27] = GUICtrlCreateInput('', 80, 323, 80, 19, $Style)
    $Input[28] = GUICtrlCreateInput('', 168, 323, 80, 19, $Style)
    GUICtrlCreateLabel('Handle:', 33, 351, 42, 14)
    $Input[29] = GUICtrlCreateInput('', 80, 348, 168, 19, $Style)
    GUICtrlCreateLabel('Text:', 33, 376, 42, 14)
    $Input[30] = GUICtrlCreateInput('', 80, 373, 308, 19, $Style)

    GUICtrlCreateTabItem('Capture')
    $Pic = GUICtrlCreatePic('', 36 + Floor((349 - $_Crop[0]) / 2), 171 + Floor((223 - $_Crop[1]) / 2), $_Crop[0], $_Crop[1], 0)
    $hPic[1] = GUICtrlGetHandle(-1)
    _SetBitmap($hPic[1], _Capture_X1(0, 0, $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], $Col[1]), 1)
;~  GUICtrlSetTip(-1, 'Click on the picture to save it')
;~  GUICtrlSetCursor(-1, 0)
    $Label[4] = GUICtrlCreateLabel('Double click on the picture to save it', 117, 276, 187, 14, $SS_CENTER)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1, BitAND($Col[0], 0xFFFFFF))
    If $_Crop[0] - 10 < 187 Then
        GUICtrlSetState(-1, $GUI_HIDE)
    EndIf

    GUICtrlCreateTabItem('AutoIt')
    GUICtrlCreateListView('Process|PID|Handle|Class|Title|Version|Path', 36, 171, 349, 223, BitOR($LVS_DEFAULT, $LVS_NOSORTHEADER), $WS_EX_CLIENTEDGE)
    GUICtrlSetFont(-1, 8.5, 400, 0, 'Tahoma')
    $hAutoIt = GUICtrlGetHandle(-1)
    _GUICtrlListView_SetExtendedListViewStyle(-1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT))
    For $i = 4 To 10
        _GUICtrlListView_SetColumnWidth(-1, $i - 4, $_Column[$i])
    Next
    $hIL = _GUIImageList_Create(16, 16, 5, 1)
    If _WinAPI_GetVersion() >= '6.0' Then
        _WinAPI_SetWindowTheme($hAutoIt, 'Explorer')
        $tData = _WinAPI_ShellGetStockIconInfo($SIID_APPLICATION, BitOR($SHGSI_ICON, $SHGSI_SMALLICON))
        $hIcon = DllStructGetData($tData, 'hIcon')
    Else
        $hIcon = _WinAPI_ExtractIcon(@SystemDir & '\shell32.dll', 2, 1)
    EndIf
    _GUIImageList_ReplaceIcon($hIL, -1, $hIcon)
    $hIcon = _WinAPI_AddIconTransparency($hIcon, 50, 1)
    _GUIImageList_ReplaceIcon($hIL, -1, $hIcon)
    _WinAPI_DestroyIcon($hIcon)
    If Not @compiled Then
        $hIcon = _WinAPI_ExtractIcon(@ScriptDir & '\Resources\214.ico', 0, 1)
    Else
        $hIcon = _WinAPI_ExtractIcon(@ScriptFullPath, -214, 1)
    EndIf
    _GUIImageList_ReplaceIcon($hIL, -1, $hIcon)
    $hIcon = _WinAPI_AddIconTransparency($hIcon, 50, 1)
    _GUIImageList_ReplaceIcon($hIL, -1, $hIcon)
    _WinAPI_DestroyIcon($hIcon)
    _GUICtrlListView_SetImageList($hAutoIt, $hIL, 1)
    $hHeader[1] = _GUICtrlListView_GetHeader(-1)
;~  _SetAutoItInfo()

    GUICtrlCreateTabItem('')

    If _WinAPI_IsThemeActive() Then
        For $i = 3  To 30
            GUICtrlSetBkColor($Input[$i], 0xFFFFFF)
        Next
        GUICtrlSetColor($Input[6 ], 0xAA0000)
        GUICtrlSetColor($Input[8 ], 0xAA0000)
        GUICtrlSetColor($Input[18], 0x9999CC)
        GUICtrlSetColor($Input[20], 0x9999CC)
        GUICtrlSetColor($Input[22], 0xAA0000)
        GUICtrlSetColor($Input[24], 0xAA0000)
    EndIf

    If $_Icon Then
        $hImageList = _GUIImageList_Create(16, 16, 5, 1)
        If Not @compiled Then
            For $i = 203 To 206
                _GUIImageList_AddIcon($hImageList, @ScriptDir & '\Resources\' & $i & '.ico')
            Next
        Else
            For $i = 203 To 206
                _GUIImageList_AddIcon($hImageList, @ScriptFullPath, -$i)
            Next
        EndIf
        _GUICtrlTab_SetImageList($hTab, $hImageList)
        For $i = 0 To 3
            _GUICtrlTab_SetItemImage($hTab, $i, $i)
        Next
    EndIf

    GUICtrlCreateGroup('Info', 10, 115, 401, 305)

    ; Controls Group
    $Group = GUICtrlCreateGroup('Controls', 10, 424, 401, 219 + $Height)
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH))
    GUICtrlCreateListView('Handle|Class|NN|ID', 22, 445, 377, 164 + $Height, BitOR($LVS_DEFAULT, $LVS_NOSORTHEADER), $WS_EX_CLIENTEDGE)
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH))
    GUICtrlSetFont(-1, 8.5, 400, 0, 'Tahoma')
    $hListView = GUICtrlGetHandle(-1)
    _GUICtrlListView_SetExtendedListViewStyle(-1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_FULLROWSELECT))
    For $i = 0 To 3
        _GUICtrlListView_SetColumnWidth(-1, $i, $_Column[$i])
    Next
    If _WinAPI_GetVersion() >= '6.0' Then
        _WinAPI_SetWindowTheme($hListView, 'Explorer')
    EndIf
    $hHeader[0] = _GUICtrlListView_GetHeader(-1)
    $Label[1] = GUICtrlCreateLabel('', 22, 619 + $Height, 12, 12, BitOR($SS_NOTIFY, $SS_SUNKEN))
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
    GUICtrlSetBkColor(-1, $_Rgb[0])
    GUICtrlSetTip(-1, 'Change color')
    GUICtrlSetCursor(-1, 0)
    GUICtrlCreateLabel('Visible', 38, 618 + $Height, 42, 14)
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
    $Label[2] = GUICtrlCreateLabel('', 92, 619 + $Height, 12, 12, BitOR($SS_NOTIFY, $SS_SUNKEN))
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
    GUICtrlSetBkColor(-1, $_Rgb[1])
    GUICtrlSetTip(-1, 'Change color')
    GUICtrlSetCursor(-1, 0)
    GUICtrlCreateLabel('Hidden', 108, 618 + $Height, 42, 14)
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
    $Label[3] = GUICtrlCreateLabel('', 162, 619 + $Height, 12, 12, BitOR($SS_NOTIFY, $SS_SUNKEN))
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
    GUICtrlSetBkColor(-1, $_Rgb[2])
    GUICtrlSetTip(-1, 'Change color')
    GUICtrlSetCursor(-1, 0)
    GUICtrlCreateLabel('Missing', 178, 618 + $Height, 42, 14)
    GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKBOTTOM, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))

    For $i = 0 To UBound($Accel) - 1
        $Accel[$i][1] = GUICtrlCreateDummy()
    Next

    GUISetAccelerators($Accel)

    ; Frame Window
;~  $hFrame = GUICreate('', 100, 100, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), WinGetHandle($GUI_UNIQUE))
    $hFrame = GUICreate('', 100, 100, -1, -1, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle($GUI_UNIQUE))

    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
    GUIRegisterMsg($WM_GETMINMAXINFO, 'WM_GETMINMAXINFO')
    GUIRegisterMsg($WM_LBUTTONDBLCLK, 'WM_LBUTTONDBLCLK')
    GUIRegisterMsg($WM_LBUTTONDOWN, 'WM_LBUTTONDOWN')
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
    GUIRegisterMsg($WM_SIZE, 'WM_SIZE')

    $Area = WinGetPos($hForm)
    If IsArray($Area) Then
        $Area[3] = $Area[3] - $_Height + 568
    EndIf

;~  GUISetState(@SW_SHOWNOACTIVATE, $hFrame)
    GUISetState(@SW_SHOW, $hForm)

    GUISwitch($hForm)

    $Enum = 1

    _GUICtrlTab_SetCurFocus($hTab, $_Tab)
;~  _WinAPI_SetFocus(0)

    $Enum = 0

    If $_Tab = 3 Then
        _SetAutoItInfo()
    EndIf

EndFunc   ;==>_GUICreate

Func _HWnd($CtrlID)
    If Not IsHWnd($CtrlID) Then
        $CtrlID = GUICtrlGetHandle($CtrlID)
        If Not $CtrlID Then
            Return 0
        EndIf
    EndIf
    Return $CtrlID
EndFunc   ;==>_HWnd

Func _IsCrop($iX, $iY, ByRef $iDX, ByRef $iDY)

    Local $Xn = 36  + Floor((349 - $_Crop[0]) / 2)
    Local $Yn = 171 + Floor((223 - $_Crop[1]) / 2)
    Local $Xc = Floor($_Crop[0] / 2)
    Local $Yc = Floor($_Crop[1] / 2)
    Local $dX, $dY

    Select
        Case ($iX > $Xn + 4) And ($iX < $Xn + $_Crop[0] - 5) And ($iY > $Yn + 4) And ($iY < $Yn + $_Crop[1] - 5)
            Return 0
        Case ($iX > $Xn - 1) And ($iX < $Xn + 5) And ($iY > $Yn - 1) And ($iY < $Yn + 5)
            $iDX = $Xi - $Xn - 2
            $iDY = $Yi - $Yn - 2
            Return 1
        Case ($iX > $Xn + $Xc - 3) And ($iX < $Xn + $Xc + 3) And ($iY > $Yn - 1) And ($iY < $Yn + 5)
            $iDX = $Xi - $Xn - $Xc
            $iDY = $Yi - $Yn - 2
            Return 2
        Case ($iX > $Xn + $_Crop[0] - 6) And ($iX < $Xn + $_Crop[0]) And ($iY > $Yn - 1) And ($iY < $Yn + 5)
            $iDX = $Xi - $Xn - $_Crop[0] + 3
            $iDY = $Yi - $Yn - 2
            Return 3
        Case ($iX > $Xn + $_Crop[0] - 6) And ($iX < $Xn + $_Crop[0]) And ($iY > $Yn + $Yc - 3) And ($iY < $Yn + $Yc + 3)
            $iDX = $Xi - $Xn - $_Crop[0] + 3
            $iDY = $Yi - $Yn - $Yc
            Return 4
        Case ($iX > $Xn + $_Crop[0] - 6) And ($iX < $Xn + $_Crop[0]) And ($iY > $Yn + $_Crop[1] - 6) And ($iY < $Yn + $_Crop[1])
            $iDX = $Xi - $Xn - $_Crop[0] + 3
            $iDY = $Yi - $Yn - $_Crop[1] + 3
            Return 5
        Case ($iX > $Xn + $Xc - 3) And ($iX < $Xn + $Xc + 3) And ($iY > $Yn + $_Crop[1] - 6) And ($iY < $Yn + $_Crop[1])
            $iDX = $Xi - $Xn - $Xc
            $iDY = $Yi - $Yn - $_Crop[1] + 3
            Return 6
        Case ($iX > $Xn - 1) And ($iX < $Xn + 5) And ($iY > $Yn + $_Crop[1] - 6) And ($iY < $Yn + $_Crop[1])
            $iDX = $Xi - $Xn - 2
            $iDY = $Yi - $Yn - $_Crop[1] + 3
            Return 7
        Case ($iX > $Xn - 1) And ($iX < $Xn + 5) And ($iY > $Yn + $Yc - 3) And ($iY < $Yn + $Yc + 3)
            $iDX = $Xi - $Xn - 2
            $iDY = $Yi - $Yn - $Yc
            Return 8
        Case Else
            Return -1
    EndSelect
EndFunc   ;==>_IsCrop

Func _IsDark($iRgb)
    If CC_GetRValue($iRgb) + CC_GetGValue($iRgb) + CC_GetBValue($iRgb) < 3 * 255 / 2 Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc   ;==>_IsDark

Func _IsDown($iKey)

    Local $Ret = DllCall('user32.dll', 'short', 'GetAsyncKeyState', 'int', $iKey)

    If (@error) Or ((Not $Ret[0]) And (_WinAPI_GetLastError())) Then
        Return SetError(1, 0, 0)
    EndIf
    Return BitAND($Ret[0], 0x8000)
EndFunc   ;==>_IsDown

Func _LoadResourceImage($hInstance, $sResType, $sResName, $iResLanguage = 0)

    Local $hInfo, $hData, $pData, $iSize, $hMem, $pMem, $hStream, $hImage

    If $iResLanguage Then
        $hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
    Else
        $hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
    EndIf
    $hData = _WinAPI_LoadResource($hInstance, $hInfo)
    $iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
    $pData = _WinAPI_LockResource($hData)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $hMem = DllCall("kernel32.dll", "ptr", "GlobalAlloc", "uint", 2, "ulong_ptr", $iSize)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $pMem = DllCall("kernel32.dll", "ptr", "GlobalLock", "ptr", $hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pMem[0], "ptr", $pData, "ulong_ptr", $iSize)
    DllCall("kernel32.dll", "int", "GlobalUnlock", "ptr", $hMem[0])
    $hStream = _WinAPI_CreateStreamOnHGlobal($hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    _GDIPlus_Startup()
    $hImage = DllCall("gdiplus.dll", "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "ptr*", 0)
    If (@error) Or ($hImage[0]) Or (Not $hImage[2]) Then
        $hImage = 0
    EndIf
    _GDIPlus_Shutdown()
    DllCall("kernel32.dll", "ptr", "GlobalFree", "ptr", $hMem[0])
    If Not IsArray($hImage) Then
        Return SetError(1, 0, 0)
    EndIf
    Return $hImage[2]
EndFunc   ;==>_LoadResourceImage

Func _OSVersion()

    Local $oService, $oItems, $Version = ''

    $oService = ObjGet('winmgmts:\\.\root\cimv2')
    If Not IsObj($oService) Then
        Return ''
    EndIf
    $oItems = $oService.ExecQuery('SELECT Caption, OSArchitecture FROM Win32_OperatingSystem')
    If Not IsObj($oItems) Then
        Return ''
    EndIf
    For $Property In $oItems
        $Version = StringStripWS($Property.Caption & ' ' & $Property.OSArchitecture, 7)
    Next
    Return $Version
EndFunc   ;==>_OSVersion

Func _PtInRect($tRect, $tPoint)

    Local $Ret = DllCall('user32.dll', 'int', 'PtInRect', 'ptr', DllStructGetPtr($tRect), 'uint64', DllStructGetData(DllStructCreate('uint64', DllStructGetPtr($tPoint)), 1))

    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    Return $Ret[0]
EndFunc   ;==>_PtInRect

Func _ReadRegistry()
    $_XPos = _WinAPI_DWordToInt(_RegRead($REG_KEY_NAME, 'XPos', 'REG_DWORD', $_XPos))
    $_YPos = _WinAPI_DWordToInt(_RegRead($REG_KEY_NAME, 'YPos', 'REG_DWORD', $_YPos))
;~  $_About = _ValueCheck(_RegRead($REG_KEY_NAME, 'About', 'REG_DWORD', $_About), 0, 1)
;~  $_Width = _ValueCheck(_RegRead($REG_KEY_NAME, 'ClientWidth', 'REG_DWORD', $_Width), 421)
    $_Height = _ValueCheck(_RegRead($REG_KEY_NAME, 'ClientHeight', 'REG_DWORD', $_Height), 552)
    $_Top = _ValueCheck(_RegRead($REG_KEY_NAME, 'AlwaysOnTop', 'REG_DWORD', $_Top), 0, 1)
    $_Position = _ValueCheck(_RegRead($REG_KEY_NAME, 'CoordinateMode', 'REG_DWORD', $_Position), 0, 3)
    $_Color = _ValueCheck(_RegRead($REG_KEY_NAME, 'ColorMode', 'REG_DWORD', $_Color), 0, 1)
    $_Crosshair = _ValueCheck(_RegRead($REG_KEY_NAME, 'Crosshair', 'REG_DWORD', $_Crosshair), 0, 1)
    $_Highlight = _ValueCheck(_RegRead($REG_KEY_NAME, 'Highlight', 'REG_DWORD', $_Highlight), 0, 1)
    $_Frame = BitAND(_RegRead($REG_KEY_NAME, 'HighlightColor', 'REG_DWORD', $_Frame), 0x00FFFFFF)
    $_Alpha = _ValueCheck(_RegRead($REG_KEY_NAME, 'HighlightTransparency', 'REG_DWORD', $_Alpha), 0, 255)
    $_Fade = _ValueCheck(_RegRead($REG_KEY_NAME, 'HighlightFadeIn', 'REG_DWORD', $_Fade), 0, 1)
    $_Code = _ValueCheck(_RegRead($REG_KEY_NAME, 'Encoding', 'REG_DWORD', $_Code), 0, 3)
    $_Icon = _ValueCheck(_RegRead($REG_KEY_NAME, 'TabIcon', 'REG_DWORD', $_Icon), 0, 1)
    $_Tab = _ValueCheck(_RegRead($REG_KEY_NAME, 'Tab', 'REG_DWORD', $_Tab), 0, 3)
    $_Rgb[0] = BitAND(_RegRead($REG_KEY_NAME, 'ControlVisibleColor', 'REG_DWORD', $_Rgb[0]), 0x00FFFFFF)
    $_Rgb[1] = BitAND(_RegRead($REG_KEY_NAME, 'ControlHiddenColor', 'REG_DWORD', $_Rgb[1]), 0x00FFFFFF)
    $_Rgb[2] = BitAND(_RegRead($REG_KEY_NAME, 'ControlMissingColor', 'REG_DWORD', $_Rgb[2]), 0x00FFFFFF)
    $_Column[0 ] = _RegRead($REG_KEY_NAME, 'ColumnControlHandle', 'REG_DWORD', $_Column[0])
    $_Column[1 ] = _RegRead($REG_KEY_NAME, 'ColumnControlClass', 'REG_DWORD', $_Column[1])
    $_Column[2 ] = _RegRead($REG_KEY_NAME, 'ColumnControlNN', 'REG_DWORD', $_Column[2])
    $_Column[3 ] = _RegRead($REG_KEY_NAME, 'ColumnControlID', 'REG_DWORD', $_Column[3])
    $_Column[4 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItProcess', 'REG_DWORD', $_Column[4])
    $_Column[5 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItPID', 'REG_DWORD', $_Column[5])
    $_Column[6 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItHandle', 'REG_DWORD', $_Column[6])
    $_Column[7 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItClass', 'REG_DWORD', $_Column[7])
    $_Column[8 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItTitle', 'REG_DWORD', $_Column[8])
    $_Column[9 ] = _RegRead($REG_KEY_NAME, 'ColumnAutoItVersion', 'REG_DWORD', $_Column[9])
    $_Column[10] = _RegRead($REG_KEY_NAME, 'ColumnAutoItPath', 'REG_DWORD', $_Column[10])
    $_Crop[0] = _ValueCheck(_RegRead($REG_KEY_NAME, 'CaptureWidth', 'REG_DWORD', $_Crop[0]), 43, 349)
    $_Crop[1] = _ValueCheck(_RegRead($REG_KEY_NAME, 'CaptureHeight', 'REG_DWORD', $_Crop[0]), 43, 223)
    $_Capture = _ValueCheck(_RegRead($REG_KEY_NAME, 'LiveCapture', 'REG_DWORD', $_Capture), 0, 1)
    $_All = _ValueCheck(_RegRead($REG_KEY_NAME, 'AutoItVisible', 'REG_DWORD', $_All), 0, 1)
    For $i = 0 To 1
        If Not Mod($_Crop[$i], 2) Then
            $_Crop[$i] -= 1
        EndIf
    Next
EndFunc   ;==>_ReadRegistry

Func _RegRead($sKey, $sValue, $sType, $sDefault)

    Local $Val, $Error = 0

    $Val = RegRead($sKey, $sValue)
    If @error Then
        Switch @error
            Case -1, 1
                RegWrite($sKey, $sValue, $sType, $sDefault)
            Case Else

        EndSwitch
        Return SetError(@error, 0, $sDefault)
    EndIf
    Switch $sType
        Case 'REG_SZ', 'REG_MULTI_SZ', 'REG_EXPAND_SZ'
            If Not IsString($Val) Then
                $Error = -3
            EndIf
        Case 'REG_BINARY'
            If Not IsBinary($Val) Then
                $Error = -3
            EndIf
        Case 'REG_DWORD'
            If Not IsInt($Val) Then
                $Error = -3
            EndIf
        Case Else
            $Error = -2
    EndSwitch
    If $Error Then
        Return SetError($Error, 0, $sDefault)
    Else
        Return $Val
    EndIf
EndFunc   ;==>_RegRead

Func _SCAW()

    Local $tState = _WinAPI_GetKeyboardState()

    For $i = 0x5B To 0x5C
        If BitAND(DllStructGetData($tState, 1, $i + 1), 0xF0) Then
            Return 1
        EndIf
    Next
    For $i = 0xA0 To 0xA5
        If BitAND(DllStructGetData($tState, 1, $i + 1), 0xF0) Then
            Return 1
        EndIf
    Next
    Return 0
EndFunc   ;==>_SCAW

Func _SetAutoItInfo()

    Local $ID, $List, $Argv, $File, $Flag, $Name, $Path, $Version, $hIcon, $Index = 0
    Local $Data[101][6] = [[0]]

    _GUICtrlListView_BeginUpdate($hAutoIt)
    _GUICtrlListView_DeleteAllItems($hAutoIt)
    _GUIImageList_SetImageCount($hIL, 4)
    $List = WinList()
    If IsArray($List) Then
        For $i = 0 To $List[0][0]
            $ID = WinGetProcess($List[$i][1])
            If ($ID <> -1) And ($ID <> @AutoItPID) And (StringInStr(_WinAPI_GetClassName($List[$i][1]), 'AutoIt v3')) And (_ArraySearch($Data, $ID, 1) = -1) Then
                $Path = _WinAPI_GetProcessFileName($ID)
                If Not $Path Then
                    ContinueLoop
                EndIf
                $Name = _WinAPI_GetProcessName($ID)
                If Not $Name Then
                    ContinueLoop
                EndIf
                $File = ''
                $Version = ''
                If ($Name = 'AutoIt3.exe') And (FileGetVersion($Path, 'ProductName') = 'AutoIt v3 Script') Then
                    $Argv = _WinAPI_CommandLineToArgv(_WinAPI_GetProcessCommandLine($ID))
                    For $i = 1 To UBound($Argv) - 1
                        If StringLeft($Argv[$i], 1) <> '/' Then
                            If _WinAPI_PathIsRelative($Argv[$i]) Then
                                $File = _WinAPI_PathSearchAndQualify(_WinAPI_GetProcessWorkingDirectory($ID) & '\' & $Argv[$i], 1)
                            Else
                                $File = _WinAPI_PathSearchAndQualify($Argv[$i], 1)
                            EndIf
                            ExitLoop
                        EndIf
                    Next
                    If $File Then
                        $Version = FileGetVersion($Path)
                        If @error Then
                            $Version = ''
                        EndIf
                    EndIf
                    $Flag = 0
                Else
                    $File = $Path
                    $Flag = 1
                EndIf
                $Data[0][0] += 1
                If $Data[0][0] > UBound($Data) - 1 Then
                    ReDim $Data[$Data[0][0] + 100][6]
                EndIf
                $Data[$Data[0][0]][0] = $ID
                $Data[$Data[0][0]][1] = $Name
                $Data[$Data[0][0]][2] = $Path
                $Data[$Data[0][0]][3] = $Version
                $Data[$Data[0][0]][4] = $File
                $Data[$Data[0][0]][5] = $Flag
            EndIf
        Next
        _ArraySort($Data, 0, 1, $Data[0][0], 1)
        $Enum += 1
        For $i = 1 To $Data[0][0]
            $List = _WinAPI_EnumProcessWindows($Data[$i][0], Not $_All)
            If Not IsArray($List) Then
                ContinueLoop
            EndIf
            For $j = 1 to $List[0][0]
                If $_All Then
                    $Flag = _WinAPI_IsWindowVisible($List[$j][0])
                Else
                    $Flag = 1
                EndIf
                If $Data[$i][5] Then
                    $hIcon = _WinAPI_ExtractIcon($Data[$i][2], 0, 1)
                    If $hIcon Then
                        If Not $Flag Then
                            $hIcon = _WinAPI_AddIconTransparency($hIcon, 50, 1)
                        Endif
                        $ID = _GUIImageList_ReplaceIcon($hIL, -1, $hIcon)
                        If $hIcon Then
                            _WinAPI_DestroyIcon($hIcon)
                        EndIf
                    EndIf
                Else
                    $hIcon = 0
                EndIf
                If Not $hIcon Then
                    If $Data[$i][5] Then
                        If $Flag Then
                            $ID = 0
                        Else
                            $ID = 1
                        EndIf
                    Else
                        If $Flag Then
                            $ID = 2
                        Else
                            $ID = 3
                        EndIf
                    EndIf
                EndIf
                _GUICtrlListView_AddItem($hAutoIt, $Data[$i][1], $ID)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, $Data[$i][0], 1)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, $List[$j][0], 2)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, $List[$j][1], 3)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, _WinAPI_GetWindowText($List[$j][0]), 4)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, $Data[$i][3], 5)
                _GUICtrlListView_AddSubItem($hAutoIt, $Index, $Data[$i][4], 6)
                If Not $Flag Then
                    _GUICtrlListView_SetItemParam($hAutoIt, $Index, 0x7FFFFFFF)
                EndIf
                $Index += 1
            Next
        Next
        $Enum -= 1
    EndIf
    _GUICtrlListView_EndUpdate($hAutoIt)
EndFunc   ;==>_SetAutoItInfo

Func _SetBitmap($hWnd, $hBitmap, $fUpdate = 0)

;~  $hWnd = _HWnd($hWnd)
;~  If Not $hWnd Then
;~      Return
;~  EndIf

    Local $hPrev, $Pos

    If Not $hBitmap Then
        $Pos = ControlGetPos($hWnd, '', 0)
    EndIf
    $hPrev = _SendMessage($hWnd, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap)
    If $hPrev Then
        _WinAPI_DeleteObject($hPrev)
    EndIf
    If Not $hBitmap Then
        _WinAPI_MoveWindow($hWnd, $Pos[0], $Pos[1], $Pos[2], $Pos[3], 0)
    Else
        $hPrev = _SendMessage($hWnd, $STM_GETIMAGE)
        If $hPrev <> $hBitmap Then
            _WinAPI_DeleteObject($hBitmap)
        EndIf
    EndIf
    If $fUpdate Then
        _WinAPI_UpdateWindow($hWnd)
    EndIf
    Return 1
EndFunc   ;==>_SetBitmap

Func _SetData($CtrlID, $sData)
    If StringCompare(GUICtrlRead($CtrlID), $sData, 1) Then
        _GUICtrlEdit_SetText($CtrlID, $sData)
    EndIf
EndFunc   ;==>_SetData

Func _SetStyle($hWnd, $iStyle, $fSet, $fExStyle = 0, $fUpdate = 0)

    $hWnd = _HWnd($hWnd)
    If Not $hWnd Then
        Return
    EndIf

    Local $Flag = $GWL_STYLE

    If $fExStyle Then
        $Flag = $GWL_EXSTYLE
    EndIf

    Local $Style = _WinAPI_GetWindowLong($hWnd, $Flag)

    If $fSet Then
        If BitAND($Style, $iStyle) <> $iStyle Then
            _WinAPI_SetWindowLong($hWnd, $Flag, BitOR($Style, $iStyle))
        EndIf
    Else
        If BitAND($Style, $iStyle) Then
            _WinAPI_SetWindowLong($hWnd, $Flag, BitAND($Style, BitNOT($iStyle)))
        EndIf
    EndIf
    If $fUpdate Then
        _WinAPI_InvalidateRect($hWnd)
    EndIf
EndFunc   ;==>_SetStyle

Func _SetControlInfo($hWnd)

    If Not $hWnd Then
        For $i = 16 To 30
            _SetData($Input[$i], '')
        Next
        Return
    EndIf

    Local $Data, $Prev, $Index

    $Index = _GUICtrlListView_GetSelectedIndices($hListView)
    $Data = _WinAPI_GetClassName($hWnd)
    If ($Index) And (StringCompare(_GUICtrlListView_GetItemText($hListView, $Index, 1), $Data, 1)) Then
        _GUICtrlListView_SetItemText($hListView, $Index, $Data, 1)
    EndIf
    If $Data Then
        _SetData($Input[16], $Data)
    Else
        _SetData($Input[16], '')
    EndIf
    $Prev = $Data
    $Data = _GetNN($hWnd)
    If $Data <= 0 Then
        $Data = ''
    EndIf
    If ($Index) And (StringCompare(_GUICtrlListView_GetItemText($hListView, $Index, 2), $Data, 1)) Then
        _GUICtrlListView_SetItemText($hListView, $Index, $Data, 2)
    EndIf
    If $Data Then
        _SetData($Input[17], $Data)
        If $Prev Then
            _SetData($Input[18], '[CLASS:' & $Prev & '; INSTANCE:' & $Data & ']')
        Else
            _SetData($Input[18], '')
        EndIf
    Else
        For $i = 17 To 18
            _SetData($Input[$i], '')
        Next
    EndIf
    $Data = _WinAPI_GetDlgCtrlID($hWnd)
    If $Data <= 0 Then
        $Data = ''
    EndIf
    If ($Index) And (StringCompare(_GUICtrlListView_GetItemText($hListView, $Index, 3), $Data, 1)) Then
        _GUICtrlListView_SetItemText($hListView, $Index, $Data, 3)
    EndIf
    If $Data Then
        _SetData($Input[19], $Data)
        If $Prev Then
            _SetData($Input[20], '[CLASS:' & $Prev & '; ID:' & $Data & ']')
        Else
            _SetData($Input[20], '')
        EndIf
    Else
        For $i = 19 To 20
            _SetData($Input[$i], '')
        Next
    EndIf
    $Data = _WinAPI_GetWindowLongEx($hWnd, $GWL_STYLE)
;~  If $Data Then
        _SetData($Input[21], '0x' & Hex($Data, 8))
        _SetData($Input[22], _GetStyleString($Data, 0, 0))
;~  Else
;~      For $i = 21 To 22
;~          _SetData($Input[$i], '')
;~      Next
;~  EndIf
    $Data = _WinAPI_GetWindowLongEx($hWnd, $GWL_EXSTYLE)
;~  If $Data Then
        _SetData($Input[23], '0x' & Hex($Data, 8))
        _SetData($Input[24], _GetStyleString($Data, 0, 1))
;~  Else
;~      For $i = 23 To 24
;~          _SetData($Input[$i], '')
;~      Next
;~  EndIf
    $Data = _WinAPI_GetWindowRect($hWnd)
    For $i = 27 To 28
        _SetData($Input[$i], DllStructGetData($Data, $i - 24) - DllStructGetData($Data, $i - 26))
    Next
    If _WinAPI_ScreenToClient(_WinAPI_GetAncestor($hWnd, $GA_ROOT), $Data) Then
        For $i = 25 To 26
            _SetData($Input[$i], DllStructGetData($Data, $i - 24))
        Next
    Else
        For $i = 25 To 26
            _SetData($Input[$i], '')
        Next
    EndIf
;~  If $hWnd Then
        _SetData($Input[29], $hWnd)
;~  Else
;~      _SetData($Input[29], '')
;~  EndIf
    $Data = StringLeft(ControlGetText($hWnd, '', 0), 80)
    Switch $_Code
        Case 0 ; ANSI
            $Data = BinaryToString(StringToBinary($Data, 2), 1)
        Case 1 ; Unicode

        Case 2 ; Unicode (Big Endian)
            $Data = BinaryToString(StringToBinary($Data, 2), 3)
        Case 3 ; UTF8
            $Data = BinaryToString(StringToBinary($Data, 2), 4)
    EndSwitch
    If $Data Then
        _SetData($Input[30], StringStripWS(StringRegExpReplace($Data, '\n.*', ''), 2))
    Else
        _SetData($Input[30], '')
    EndIf
EndFunc   ;==>_SetControlInfo

Func _SetWindowInfo($hWnd)

    If Not $hWnd Then
        For $i = 3 To 15
            _SetData($Input[$i], '')
        Next
        Return
    EndIf

    Local $Data

    $Data = _WinAPI_GetWindowText($hWnd)
    If $Data Then
        _SetData($Input[3], $Data)
    Else
        _SetData($Input[3], '')
    EndIf
    $Data = _WinAPI_GetClassName($hWnd)
    If $Data Then
        _SetData($Input[4], $Data)
    Else
        _SetData($Input[4], '')
    EndIf
    $Data = _WinAPI_GetWindowLongEx($hWnd, $GWL_STYLE)
;~  If $Data Then
        _SetData($Input[5], '0x' & Hex($Data, 8))
        _SetData($Input[6], _GetStyleString($Data))
;~  Else
;~      For $i = 5 To 6
;~          _SetData($Input[$i], '')
;~      Next
;~  EndIf
    $Data = _WinAPI_GetWindowLongEx($hWnd, $GWL_EXSTYLE)
;~  If $Data Then
        _SetData($Input[7], '0x' & Hex($Data, 8))
        _SetData($Input[8], _GetStyleString($Data, 1, 1))
;~  Else
;~      For $i = 7 To 8
;~          _SetData($Input[$i], '')
;~      Next
;~  EndIf
    $Data = _WinAPI_GetWindowRect($hWnd)
    For $i = 9  To 10
        _SetData($Input[$i], DllStructGetData($Data, $i - 8))
    Next
    For $i = 11 To 12
        _SetData($Input[$i], DllStructGetData($Data, $i - 8) - DllStructGetData($Data, $i - 10))
    Next
;~  If $hWnd Then
        _SetData($Input[13], $hWnd)
;~  Else
;~      _SetData($Input[13], '')
;~  EndIf
    $Data = WinGetProcess($hWnd)
    If $Data > -1 Then
        _SetData($Input[14], $Data)
        $Data = _WinAPI_GetProcessFileName($Data)
        If Not @error Then
            _SetData($Input[15], FileGetLongName($Data))
        Else
            _SetData($Input[15], '')
        EndIf
    Else
        For $i = 14 To 15
            _SetData($Input[$i], '')
        Next
    EndIf
EndFunc   ;==>_SetWindowInfo

Func _SetFrameOrder($hOwner)
    If BitAND(_WinAPI_GetWindowLong($hOwner, $GWL_EXSTYLE), $WS_EX_TOPMOST) Then
        WinSetOnTop($hFrame, '', 1)
    Else
        WinSetOnTop($hFrame, '', 0)
    EndIf
    If _WinAPI_SetWindowPos($hFrame, _WinAPI_GetWindow($hOwner, $GW_HWNDPREV), 0, 0, 0, 0, BitOR($SWP_NOACTIVATE, $SWP_NOMOVE, $SWP_NOSIZE)) Then
        Return 1
    Else
        Return 0
    EndIf
EndFunc   ;==>_SetFrameOrder

Func _ShellAboutDlg($hParent = 0)

    Local $hDlg, $hLayer, $hPng, $tSize, $Button, $Msg, $Pos, $Top = 0

    If Not $hAbout Then
        _GDIPlus_Startup()
        If Not @compiled Then
            $hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Resources\About.png')
        Else
            $hPng = _LoadResourceImage($hInstance, 'PNG', 'ABOUT')
        EndIf
        $hAbout = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
        _GDIPlus_ImageDispose($hPng)
        _GDIPlus_Shutdown()
    EndIf

    $tSize = _WinAPI_GetBitmapDimension($hAbout)
    If @error Then
        Return 0
    EndIf

;~  Opt('GUICloseOnESC', 1)

    GUISetState(@SW_DISABLE, $hParent)

    If Not $hParent Then
        $Top = $WS_EX_TOPMOST
    EndIf

    $hDlg = GUICreate($GUI_NAME, DllStructGetData($tSize, 1), DllStructGetData($tSize, 2), -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $Top), $hParent)
    $Pos = WinGetPos($hDlg)
    $hLayer = GUICreate('', 70, 23, $Pos[0] + ($Pos[2] - 70) / 2, $Pos[1] + $Pos[3] - 50, $WS_POPUP, $WS_EX_LAYERED, $hDlg)
;~  GUISetFont(8.5, 400, 0, 'MS Shell Dlg', $hLayer)
    GUISetBkColor(0x2B5280, $hLayer)
    $Button = GUICtrlCreateButton('OK', 0, 0, 70, 23)
    GUICtrlSetState(-1, $GUI_FOCUS)

    _WinAPI_SetLayeredWindowAttributes($hLayer, 0x2B5280, 0, $LWA_COLORKEY)
    _WinAPI_UpdateLayeredWindowEx($hDlg, -1, -1, $hAbout)

    GUISetState(@SW_SHOW, $hDlg)
    GUISetState(@SW_SHOW, $hLayer)

    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case $GUI_EVENT_CLOSE, $Button
                ExitLoop
        EndSwitch
    WEnd

    GUISetState(@SW_ENABLE, $hParent)
    GUIDelete($hLayer)
    GUIDelete($hDlg)

;~  Opt('GUICloseOnESC', 0)

EndFunc   ;==>_ShellAboutDlg

Func _ShellKillProcess($PID, $hParent = 0)

    Local $Name = _WinAPI_GetProcessName($PID)

    If Not $Name Then
        Return 0
    EndIf
    If MsgBox(256 + 48 + 4, $GUI_NAME, 'Are you sure you want to close this prosess?', 0, $hParent) = 6 Then
        If Not ProcessClose($PID) Then
            MsgBox(16, $GUI_NAME, 'Unable to close the process.', 0, $hParent)
            Return 0
        Else
            Return 1
        EndIf
    EndIf
    Return 0
EndFunc   ;==>_ShellKillProcess

Func _ShellReportDlg($hParent = 0)

    Local $hFile, $Data, $Path, $Result

    $Path = FileSaveDialog('Save Report', StringRegExpReplace($PathDlg, '\\[^\\]*\Z', ''), 'Text Document (*.txt)|All Files (*.*)', 2 + 16, 'Report.txt', $hParent)
    If Not $Path Then
        Return 1
    EndIf
    $PathDlg = StringRegExpReplace($Path, '^.*\.', '')
    $Data = _CreateReport()
    If Not $Data Then
        Return 0
    EndIf
    $hFile = FileOpen($Path, 2)
    $Result = FileWrite($hFile, $Data)
    FileClose($hFile)
    Return $Result
EndFunc   ;==>_ShellReportDlg

Func _ShellSaveDlg($hParent = 0)

    Local $hSrcDC, $hDstDC, $hSrcSv, $hDstSv, $hArea, $hBitmap, $Path, $Result

    $Path = FileSaveDialog('Save Image', StringRegExpReplace($PathDlg, '\\[^\\]*\Z', ''), 'Portable Network Graphic (*.png)|All Files (*.*)', 2 + 16, 'Capture.png', $hParent)
    If Not $Path Then
        Return 1
    EndIf
    $PathDlg = StringRegExpReplace($Path, '^.*\.', '')
    $hBitmap = _SendMessage($hPic[1], $STM_GETIMAGE)
    If Not $hBitmap Then
        Return 0
    EndIf
    $hArea = _WinAPI_CreateBitmap($_Crop[0] - 10, $_Crop[1] - 10, 1, 32)
    If Not $hArea Then
        Return 0
    EndIf
    $hSrcDC = _WinAPI_CreateCompatibleDC(0)
    $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBitmap)
    $hDstDC = _WinAPI_CreateCompatibleDC(0)
    $hSrcSv = _WinAPI_SelectObject($hDstDC, $hArea)
    _WinAPI_BitBlt($hDstDC, 0, 0, $_Crop[0] - 10, $_Crop[1] - 10, $hSrcDC, 5, 5, $SRCCOPY)
    _WinAPI_SelectObject($hSrcDC, $hSrcSv)
    _WinAPI_SelectObject($hDstDC, $hDstSv)
    _WinAPI_DeleteDC($hSrcDC)
    _WinAPI_DeleteDC($hDstSv)
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hArea)
    $Result = _GDIPlus_ImageSaveToFile($hBitmap, $Path)
    _GDIPlus_BitmapDispose($hBitmap)
    _WinAPI_DeleteObject($hArea)
    Return $Result
EndFunc   ;==>_ShellSaveDlg

Func _ShowFrame($fShow, $tRect = 0, $hOwner = 0)

    If (Not $_Alpha) Or (Not $_Highlight) Then
        Return
    EndIf

    Local $hGraphics, $hPen, $hBitmap, $Pos

    If $_Fade Then
        AdlibUnRegister('_ShowProc')
        $Fade = 0
        $Hold = 0
    EndIf
    If $hRect Then
        _WinAPI_UpdateLayeredWindowEx($hFrame, -1, -1, $hRect, 0, 1)
;       _WinAPI_DeleteObject($hRect)
    EndIf
    $Alpha = 0
    $hRect = 0
    If Not $fShow Then
        GUISetState(@SW_HIDE, $hFrame)
        If $_Fade Then
            $Fade = 1
            $Hold = TimerInit()
            AdlibRegister('_ShowProc', 10)
        EndIf
        Return
    EndIf
    $Pos = _WinAPI_GetPosFromRect($tRect)
    If (Not IsArray($Pos)) Or (Not $Pos[2]) Or (Not $Pos[3]) Then
        GUISetState(@SW_HIDE, $hFrame)
        Return
    EndIf
    WinMove($hFrame, '', $Pos[0], $Pos[1], $Pos[2], $Pos[3])
;~  WinSetOnTop($hFrame, '', 1)
    If $hOwner Then
        _SetFrameOrder($hOwner)
    EndIf
    $hBitmap = _GDIPlus_CreateBitmapFromScan0($Pos[2], $Pos[3])
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
;~  _GDIPlus_GraphicsClear($hGraphics, 0)
    $hPen = _GDIPlus_PenCreate(BitOR(BitShift($_Alpha, -24), $_Frame), 3)
    _GDIPlus_GraphicsDrawRect($hGraphics, 1, 1, _Max($Pos[2] - 3, 1), _Max($Pos[3] - 3, 1), $hPen)
    $hRect = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hBitmap)
    _GDIPlus_PenDispose($hPen)
    If $hRect Then
        GUISetState(@SW_SHOWNOACTIVATE, $hFrame)
    Else
        GUISetState(@SW_HIDE, $hFrame)
        If $_Fade Then
            $Hold = TimerInit()
        Else
            Return
        EndIf
    EndIf
    If $_Fade Then
        $Fade = 1
        AdlibRegister('_ShowProc', 10)
    Else
        If Not _WinAPI_UpdateLayeredWindowEx($hFrame, -1, -1, $hRect, $_Alpha) Then
            ; Nothing
        EndIf
    EndIf
EndFunc   ;==>_ShowFrame

Func _ShowProc()
    If $Hold Then
        If TimerDiff($Hold) > 250 Then
            AdlibUnRegister('_ShowProc')
            $Fade = 0
            $Hold = 0
        EndIf
        Return
    EndIf
    $Alpha += $_Alpha / 8
    If $Alpha >= $_Alpha Then
        $Alpha = $_Alpha
        $Hold  = TimerInit()
    EndIf
    If Not _WinAPI_UpdateLayeredWindowEx($hFrame, -1, -1, $hRect, $Alpha) Then
        ; Nothing
    EndIf
EndFunc   ;==>_ShowProc

Func _Update($fDisable = 0)

    $Refresh += 1

    Opt('GUIOnEventMode', 1)

    Local $State, $Update = False
    Local $hItem

    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1
        $hItem = Ptr(_GUICtrlListView_GetItemText($hListView, $i))
        If (Not $fDisable) And (_WinAPI_IsWindow($hItem)) Then
            $State = _WinAPI_IsWindowVisible($hItem)
            If _GUICtrlListView_GetItemChecked($hListView, $i) <> $State Then
                If Not $Update Then
                    $Update = _GUICtrlListView_BeginUpdate($hListView)
                EndIf
                _GUICtrlListView_SetItemChecked($hListView, $i, $State)
                If _GUICtrlListView_GetItemState($hListView, $i, $LVIS_SELECTED) Then
                    _SetControlInfo($hItem)
                EndIf
            EndIf
        Else
            If Not $Update Then
                $Update = _GUICtrlListView_BeginUpdate($hListView)
            EndIf
            If _GUICtrlListView_GetItemChecked($hListView, $i) Then
                _GUICtrlListView_SetItemChecked($hListView, $i, 0)
            EndIf
            If $hItem Then
                _GUICtrlListView_SetItemText($hListView, $i, $hItem & ChrW(160))
            EndIf
            _GUICtrlListView_RedrawItems($hListView, $i, $i)
        EndIf
    Next
    If $Update Then
        _GUICtrlListView_EndUpdate($hListView)
    EndIf

    Opt('GUIOnEventMode', 0)

    $Refresh -= 1

EndFunc   ;==>_Update

Func _ValueCheck($iValue, $iMin, $iMax = Default)
    If ($iMin <> Default) And ($iValue < $iMin) Then
        Return $iMin
    EndIf
    If ($iMax <> Default) And ($iValue > $iMax) Then
        Return $iMax
    EndIf
    Return $iValue
EndFunc   ;==>_ValueCheck

Func _WriteRegistry()
    RegWrite($REG_KEY_NAME, 'XPos', 'REG_DWORD', $_XPos)
    RegWrite($REG_KEY_NAME, 'YPos', 'REG_DWORD', $_YPos)
;~  RegWrite($REG_KEY_NAME, 'About', 'REG_DWORD', $_About)
    RegWrite($REG_KEY_NAME, 'ClientWidth', 'REG_DWORD', $_Width)
    RegWrite($REG_KEY_NAME, 'ClientHeight', 'REG_DWORD', $_Height)
    RegWrite($REG_KEY_NAME, 'AlwaysOnTop', 'REG_DWORD', $_Top)
    RegWrite($REG_KEY_NAME, 'CoordinateMode', 'REG_DWORD', $_Position)
    RegWrite($REG_KEY_NAME, 'ColorMode', 'REG_DWORD', $_Color)
    RegWrite($REG_KEY_NAME, 'Crosshair', 'REG_DWORD', $_Crosshair)
    RegWrite($REG_KEY_NAME, 'Highlight', 'REG_DWORD', $_Highlight)
    RegWrite($REG_KEY_NAME, 'HighlightColor', 'REG_DWORD', $_Frame)
    RegWrite($REG_KEY_NAME, 'HighlightTransparency', 'REG_DWORD', $_Alpha)
    RegWrite($REG_KEY_NAME, 'HighlightFadeIn', 'REG_DWORD', $_Fade)
    RegWrite($REG_KEY_NAME, 'Encoding', 'REG_DWORD', $_Code)
;~  RegWrite($REG_KEY_NAME, 'TabIcon', 'REG_DWORD', $_Icon)
    RegWrite($REG_KEY_NAME, 'Tab', 'REG_DWORD', $_Tab)
    RegWrite($REG_KEY_NAME, 'ControlVisibleColor', 'REG_DWORD', $_Rgb[0])
    RegWrite($REG_KEY_NAME, 'ControlHiddenColor', 'REG_DWORD', $_Rgb[1])
    RegWrite($REG_KEY_NAME, 'ControlMissingColor', 'REG_DWORD', $_Rgb[2])
    RegWrite($REG_KEY_NAME, 'ColumnControlHandle', 'REG_DWORD', $_Column[0])
    RegWrite($REG_KEY_NAME, 'ColumnControlClass', 'REG_DWORD', $_Column[1])
    RegWrite($REG_KEY_NAME, 'ColumnControlNN', 'REG_DWORD', $_Column[2])
    RegWrite($REG_KEY_NAME, 'ColumnControlID', 'REG_DWORD', $_Column[3])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItProcess', 'REG_DWORD', $_Column[4])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItPID', 'REG_DWORD', $_Column[5])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItHandle', 'REG_DWORD', $_Column[6])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItClass', 'REG_DWORD', $_Column[7])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItTitle', 'REG_DWORD', $_Column[8])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItVersion', 'REG_DWORD', $_Column[9])
    RegWrite($REG_KEY_NAME, 'ColumnAutoItPath', 'REG_DWORD', $_Column[10])
    RegWrite($REG_KEY_NAME, 'CaptureWidth', 'REG_DWORD', $_Crop[0])
    RegWrite($REG_KEY_NAME, 'CaptureHeight', 'REG_DWORD', $_Crop[1])
    RegWrite($REG_KEY_NAME, 'LiveCapture', 'REG_DWORD', $_Capture)
    RegWrite($REG_KEY_NAME, 'AutoItVisible', 'REG_DWORD', $_All)
    If @compiled Then
        RegWrite($REG_KEY_NAME, 'Path', 'REG_SZ', @ScriptFullPath)
    EndIf
EndFunc   ;==>_WriteRegistry

#EndRegion Additional Functions

#Region Hotkey Assigned Functions

Func _HK_Edit()
    Switch _WinAPI_GetFocus()
        Case 0

        Case $hAutoIt
            If Not _SCAW() Then
                GUICtrlSendToDummy($Dummy[4])
            EndIf
            Return
    EndSwitch
    GUISetAccelerators(0, $hForm)
    Send('{ENTER}')
    GUISetAccelerators($Accel, $hForm)
EndFunc   ;==>_HK_Edit

Func _HK_SelectAll()

    Local $ID = _WinAPI_GetDlgCtrlID(_WinAPI_GetFocus())

    For $i = 0 To UBound($Input) - 1
        If $Input[$i] = $ID Then
            _GUICtrlEdit_SetSel($ID, 0, -1)
            Return
        EndIf
    Next
    GUISetAccelerators(0, $hForm)
    Send('^a')
    GUISetAccelerators($Accel, $hForm)
EndFunc   ;==>_HK_SelectAll

#EndRegion Hotkey Assigned Functions

#Region GDI+ Functions

Func _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)

    Local $Ret = DllCall($ghGDIPDll, 'uint', 'GdipBitmapGetPixel', 'ptr', $hBitmap, 'int', $iX, 'int', $iY, 'uint*', 0)

    If (@error) Or ($Ret[0]) Then
        Return SetError(@error, @extended, 0)
    EndIf
    Return $Ret[4]
EndFunc   ;==>_GDIPlus_BitmapGetPixel

Func _GDIPlus_CreateBitmapFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)

    Local $Ret = DllCall($ghGDIPDll, 'uint', 'GdipCreateBitmapFromScan0', 'int', $iWidth, 'int', $iHeight, 'int', $iStride, 'int', $iPixelFormat, 'ptr', $pScan0, 'ptr*', 0)

    If (@error) Or ($Ret[0]) Then
        Return SetError(@error, @extended, 0)
    EndIf
    Return $Ret[6]
EndFunc   ;==>_GDIPlus_CreateBitmapFromScan0

#EndRegion GDI+ Functions

#Region Windows Message Functions

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)

    ; Handler from ColorChooser.au3
    CC_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)

    Switch $hWnd
        Case $hForm
            Switch _WinAPI_HiWord($wParam)
                Case $EN_KILLFOCUS
                    _GUICtrlEdit_SetSel(_WinAPI_LoWord($wParam), 0, 0)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)

    Local $tMMI = DllStructCreate('long Reserved[2];long MaxSize[2];long MaxPosition[2];long MinTrackSize[2];long MaxTrackSize[2]', $lParam)

    Switch $hWnd
        Case $hForm
            If IsArray($Area) Then
                DllStructSetData($tMMI, 'MinTrackSize', $Area[2], 1)
                DllStructSetData($tMMI, 'MinTrackSize', $Area[3], 2)
                DllStructSetData($tMMI, 'MaxTrackSize', $Area[2], 1)
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_GETMINMAXINFO

Func WM_LBUTTONDBLCLK($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm

            Local $Info = GUIGetCursorInfo($hForm)

            If (IsArray($Info)) And ($Info[4] = $Pic) And ($hDesktop) And (Not _SCAW()) Then
                GUICtrlSendToDummy($Dummy[3])
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_LBUTTONDBLCLK

Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm

            Local $Info = GUIGetCursorInfo($hForm)

            If (IsArray($Info)) And ($Info[4] = $Pic) Then
                GUICtrlSendToDummy($Dummy[2])
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_LBUTTONDOWN

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    If $Enum Then
        Return $GUI_RUNDEFMSG
    EndIf

    Local $tNMITEMACTIVATE = DllStructCreate($tagNMHDR & __Iif(@AutoItX64, ';int', '') & ';int Item;int SubItem;uint NewState;uint OldState;uint Changed;long X;long Y;lparam lParam;uint KeyFlags', $lParam)
;~  Local $tNMITEMACTIVATE = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $hFrom = DllStructGetData($tNMITEMACTIVATE, 'hWndFrom')
    Local $Index = DllStructGetData($tNMITEMACTIVATE, 'Item')
    Local $ID = DllStructGetData($tNMITEMACTIVATE, 'Code')
    Local $hItem, $State = False

    Switch $hFrom
        Case $hHeader[0]
            Switch $ID
                Case $HDN_ITEMCHANGEDW
                    $_Column[$Index + 0] = _GUICtrlListView_GetColumnWidth($hListView, $Index)
            EndSwitch
        Case $hHeader[1]
            Switch $ID
                Case $HDN_ITEMCHANGEDW
                    $_Column[$Index + 4] = _GUICtrlListView_GetColumnWidth($hAutoIt, $Index)
            EndSwitch
        Case $hListView
            Switch $ID
                Case $LVN_BEGINDRAG
                    Return 0
                Case $NM_CUSTOMDRAW

                    Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMHDR & __Iif(@AutoItX64, ';int', '') & ';dword DrawStage;hwnd hDC;long Left;long Top;long Right;long Bottom;dword_ptr ItemSpec;uint ItemState;lparam ItemlParam;dword clrText;dword clrTextBk;int SubItem;dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartId;int StateId;long TextLeft;long TextTop;long TextRight;long TextBottom;uint Align', $lParam)
;~                  Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                    Local $Stage = DllStructGetData($tNMLVCUSTOMDRAW, 'DrawStage')
                    Local $Index = DllStructGetData($tNMLVCUSTOMDRAW, 'ItemSpec')
                    Local $BGR = $_Rgb[0]

                    Switch $Stage
                        Case $CDDS_ITEMPREPAINT
                            Return $CDRF_NOTIFYSUBITEMDRAW
                        Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
                            $hItem = Ptr(_GUICtrlListView_GetItemText($hListView, $Index))
                            If _WinAPI_IsWindow($hItem) Then
                                $State = _WinAPI_IsWindowVisible($hItem)
                                If Not $State Then
                                    $BGR = $_Rgb[1]
                                EndIf
                            Else
                                $BGR = $_Rgb[2]
                                If $hItem Then
                                    _GUICtrlListView_SetItemText($hListView, $Index, $hItem & ChrW(160))
                                    $hItem = 0
                                EndIf
                            EndIf
                            If _GUICtrlListView_GetItemChecked($hListView, $Index) <> $State Then
                                _GUICtrlListView_SetItemChecked($hListView, $Index, $State)
                                _GUICtrlListView_RedrawItems($hListView, $Index, $Index)
                                If ($hItem) And (Not $Refresh) And (_GUICtrlListView_GetItemState($hListView, $Index, $LVIS_SELECTED)) Then
                                    GUICtrlSendToDummy($Dummy[1], $Index)
                                EndIf
                            EndIf
                            If $BGR Then
                                DllStructSetData($tNMLVCUSTOMDRAW, 'clrText', _WinAPI_SwitchColor($BGR))
                            EndIf
                    EndSwitch
                Case $LVN_ITEMCHANGING
                    If Not _GUICtrlListView_GetItemChecked($hListView, $Index) Then
                        _GUICtrlListView_SetItemParam($hListView, $Index, 0x7FFFFFFF)
                    Else
                        _GUICtrlListView_SetItemParam($hListView, $Index, 0)
                    EndIf
                Case $LVN_ITEMCHANGED
                    $hItem = Ptr(_GUICtrlListView_GetItemText($hListView, $Index))
                    If _GUICtrlListView_GetItemParam($hListView, $Index) Then
                        $State = 1
                    EndIf
                    If _GUICtrlListView_GetItemChecked($hListView, $Index) <> $State Then
                        If (BitAND(DllStructGetData($tNMITEMACTIVATE, 'NewState'), $LVIS_SELECTED)) And (Not BitAND(DllStructGetData($tNMITEMACTIVATE, 'OldState'), $LVIS_FOCUSED)) Then
                            If _WinAPI_IsWindow($hItem) Then
                                If Not $Browser Then
                                    If _WinAPI_IsWindowVisible($hItem) Then
                                        _ShowFrame(1, _WinAPI_GetWindowRect($hItem), _WinAPI_GetParent($hItem))
                                        $hOver = $hItem
                                    Else
                                        _ShowFrame(0)
                                        $hOver = 0
                                    EndIf
                                EndIf
                                _SetControlInfo($hItem)
                            Else
                                _SetControlInfo(0)
                            EndIf
                        EndIf
                        If Not $Browser Then
                            GUICtrlSendToDummy($Dummy[0], $Index)
                        EndIf
                    Else
                        If Not $Refresh Then
                            If _WinAPI_IsWindow($hItem) Then
                                If _WinAPI_IsWindowVisible($hItem) Then
                                    ControlHide($hItem, '', '')
                                    $State = 0
                                Else
                                    ControlShow($hItem, '', '')
                                    $State = 1
                                EndIf
                                If (_WinAPI_IsWindow($hItem)) And (_WinAPI_IsWindowVisible($hItem) = $State) And (_GUICtrlListView_GetItemState($hListView, $Index, $LVIS_SELECTED)) Then
                                    _SetControlInfo($hItem)
                                EndIf
                                _Update()
                            EndIf
                        EndIf
                    EndIf
            EndSwitch
        Case $hAutoIt
            Switch $ID
                Case $LVN_BEGINDRAG
                    Return 0
                Case $NM_CUSTOMDRAW

                    Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMHDR & __Iif(@AutoItX64, ';int', '') & ';dword DrawStage;hwnd hDC;long Left;long Top;long Right;long Bottom;dword_ptr ItemSpec;uint ItemState;lparam ItemlParam;dword clrText;dword clrTextBk;int SubItem;dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartId;int StateId;long TextLeft;long TextTop;long TextRight;long TextBottom;uint Align', $lParam)
;~                  Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                    Local $Stage = DllStructGetData($tNMLVCUSTOMDRAW, 'DrawStage')
                    Local $Index = DllStructGetData($tNMLVCUSTOMDRAW, 'ItemSpec')

                    Switch $Stage
                        Case $CDDS_ITEMPREPAINT
                            Return $CDRF_NOTIFYSUBITEMDRAW
                        Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
                            If _GUICtrlListView_GetItemParam($hAutoIt, $Index) Then
                                DllStructSetData($tNMLVCUSTOMDRAW, 'clrText', _WinAPI_SwitchColor($_Rgb[1]))
                            Else
                                DllStructSetData($tNMLVCUSTOMDRAW, 'clrText', _WinAPI_SwitchColor($_Rgb[0]))
                            EndIf
                    EndSwitch
                Case $LVN_ITEMACTIVATE
                    GUICtrlSendToDummy($Dummy[4])
                Case $LVN_KEYDOWN
                    If Not _SCAW() Then
                        Switch BitAND($Index, 0xFF)
                            Case 0x2E ; DEL
                                GUICtrlSendToDummy($Dummy[5])
                            Case 0x74 ; F5
                                GUICtrlSendToDummy($Dummy[6])
                        EndSwitch
                    EndIf
            EndSwitch
        Case $hTab
            Switch $ID
                Case $TCN_SELCHANGE
                    $_Tab = _GUICtrlTab_GetCurSel($hTab)
                    If $_Tab = 3 Then
                        _SetAutoItInfo()
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)

    Local $tPlacement

    Switch $hWnd
        Case $hForm
            If Not _WinAPI_IsIconic($hForm) Then
                $tPlacement = _WinAPI_GetWindowPlacement($hForm)
                $_XPos = DllStructGetData($tPlacement, 'rcNormalPosition', 1)
                $_YPos = DllStructGetData($tPlacement, 'rcNormalPosition', 2)
;~              If $_XPos < 0 Then
;~                  $_XPos = 0
;~              EndIf
;~              If $_YPos < 0 Then
;~                  $_YPos = 0
;~              EndIf
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            Switch $wParam
                Case 0 ; SIZE_RESTORED
                    $_Width  = _WinAPI_LoWord($lParam)
                    $_Height = _WinAPI_HiWord($lParam)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam)

    If $Browser Then
        Return $GUI_RUNDEFMSG
    EndIf

    Local $Info, $dX, $dY, $ID = -1

    Switch $hWnd
        Case 0

        Case $hForm, $hPopup
            If $Resize = -1 Then
                $Info = GUIGetCursorInfo($hForm)
                If (IsArray($Info)) And ($Info[4] = $Pic) Then
                    Switch _IsCrop($Info[0], $Info[1], $dX, $dY)
                        Case 0
                            If _IsDown(0x11) Then
                                If $hDesktop Then
                                    If _IsDown($Key) Then
                                        $ID = 2
                                    Else
                                        $ID = 1
                                    EndIf
                                EndIf
                            EndIf
                        Case 1, 5
                            $ID = 3
                        Case 2, 6
                            $ID = 4
                        Case 3, 7
                            $ID = 5
                        Case 4, 8
                            $ID = 6
                    EndSwitch
                EndIf
            Else
                $ID = $Resize
            EndIf
            If $ID <> -1 Then
                _WinAPI_SetCursor($hCursor[$ID])
                Return 1
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SETCURSOR

#EndRegion Windows Message Functions

#Region AutoIt Exit Functions

Func AutoItExit()
;~  Switch @ExitMethod
;~      Case 3, 4 ; Logoff, Shutdown

;~      Case Else
            _WriteRegistry()
;~  EndSwitch
    If $hPrev Then
        _WinAPI_SetSystemCursor($hPrev, $IDI_APPLICATION, 1)
    EndIf
    If $hForm Then
        GUIDelete($hFrame)
        GUIDelete($hForm)
    EndIf
    _GDIPlus_Shutdown()
;~  For $i = 0 To 7
;~      _WinAPI_DestroyCursor($hCursor[$i])
;~  Next
EndFunc   ;==>AutoItExit

#EndRegion AutoIt Exit Functions

Could someone please help me get this running in AutoIt ver. 3.3.12.0

Thank you,

Docfxit

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Try these versions:

 

CV.au3

#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.6.1
    Author:         Yashied

    Script Function:
        (Control Viewer v1.1) AutoIt Window Information Tool

#ce ----------------------------------------------------------------------------

#Region Resources

#AutoIt3Wrapper_UseX64=N
#AutoIt3Wrapper_UseUpx=N
#AutoIt3Wrapper_OutFile=CV.exe
#AutoIt3Wrapper_Icon=Resources\CV.ico
#AutoIt3Wrapper_Run_Au3Stripper=y
#AutoIt3Wrapper_Icon=Resources\CV.ico
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Dialog, 1000,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 162,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 164,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Icon, 169,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, Menu, 166,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete %out%, %out%, VersionInfo, 1,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -delete "%out%", "%out%", 24, 1,
#AutoIt3Wrapper_Run_After=Utilities\ResHacker.exe -add %out%, %out%, Resources\CV.res,,,
;~#AutoIt3Wrapper_Run_After=Utilities\Upx.exe "%out%" --best --no-backup --overlay=copy --compress-exports=1 --compress-resources=0 --strip-relocs=1
#AutoIt3Wrapper_Run_After=del CV_Obfuscated.au3
#AutoIt3Wrapper_Run_After=del Utilities\ResHacker.ini
#AutoIt3Wrapper_Run_After=del Utilities\ResHacker.log
#Au3Stripper_Parameters=/striponly
#EndRegion Resources

#Region Initialization

#NoTrayIcon

#Include <Array.au3>
#Include <ComboConstants.au3>
#Include <Constants.au3>
#Include <GDIPlus.au3>
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <GUIEdit.au3>
#Include <GUIImageList.au3>
#Include <GUIListView.au3>
#Include <GUIMenu.au3>
#Include <GUITab.au3>
#Include <HeaderConstants.au3>
#Include <Math.au3>
#Include <StaticConstants.au3>
#Include <TabConstants.au3>
#include <WinAPIRes.au3>
#include <WindowsConstants.au3>
#include <APIShellExConstants.au3>
#include <WinAPITheme.au3>
#include <WinAPISys.au3>
#include <WinAPIShellEx.au3>
#include <WinAPIProc.au3>
#include <WinAPIMisc.au3>

;~ #Include "UDFs\APIConstants.au3"
;~#Include "UDFs\APIErrors.au3"
#Include "UDFs\ColorChooser.au3"
;~ #Include "UDFs\WinAPIEx.au3"

;~Opt('GUICloseOnESC', 0)
Opt('GUIResizeMode', BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKWIDTH, $GUI_DOCKHEIGHT))
Opt('MustDeclareVars', 1)
Opt('WinTitleMatchMode', 3)
Opt('WinWaitDelay', 0)

Global Const $GUI_NAME = 'Control Viewer'
Global Const $GUI_VERSION = '1.1'
;~Global Const $GUI_UNIQUE = $GUI_NAME & '_' & $GUI_VERSION & '_CvrXp'
Global Const $GUI_UNIQUE = $GUI_NAME & '_CvrXp'

Global Const $REG_KEY_NAME = 'HKCU\Software\Y''s\' & $GUI_NAME

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173

Global Const $Style[31][2] = _
    [[0x00000004, 'DS_3DLOOK'], _
     [0x00000001, 'DS_ABSALIGN'], _
     [0x00000800, 'DS_CENTER'], _
     [0x00001000, 'DS_CENTERMOUSE'], _
     [0x00002000, 'DS_CONTEXTHELP'], _
     [0x00000400, 'DS_CONTROL'], _
     [0x00000008, 'DS_FIXEDSYS'], _
     [0x00000020, 'DS_LOCALEDIT'], _
     [0x00000080, 'DS_MODALFRAME'], _
     [0x00000010, 'DS_NOFAILCREATE'], _
     [0x00000100, 'DS_NOIDLEMSG'], _
     [0x00000040, 'DS_SETFONT'], _
     [0x00000200, 'DS_SETFOREGROUND'], _
     [0x00000002, 'DS_SYSMODAL'], _
     [0x00800000, 'WS_BORDER'], _
     [0x00C00000, 'WS_CAPTION'], _
     [0x40000000, 'WS_CHILD'], _
     [0x02000000, 'WS_CLIPCHILDREN'], _
     [0x04000000, 'WS_CLIPSIBLINGS'], _
     [0x08000000, 'WS_DISABLED'], _
     [0x00400000, 'WS_DLGFRAME'], _
     [0x00020000, 'WS_GROUP'], _
     [0x00100000, 'WS_HSCROLL'], _
     [0x01000000, 'WS_MAXIMIZE'], _
     [0x20000000, 'WS_MINIMIZE'], _
     [0x80000000, 'WS_POPUP'], _
     [0x00040000, 'WS_SIZEBOX'], _
     [0x00080000, 'WS_SYSMENU'], _
     [0x00010000, 'WS_TABSTOP'], _
     [0x10000000, 'WS_VISIBLE'], _
     [0x00200000, 'WS_VSCROLL']]

Global Const $ExStyle[21][2] = _
    [[0x00000010, 'WS_EX_ACCEPTFILES'], _
     [0x00040000, 'WS_EX_APPWINDOW'], _
     [0x00000200, 'WS_EX_CLIENTEDGE'], _
     [0x02000000, 'WS_EX_COMPOSITED'], _
     [0x00000400, 'WS_EX_CONTEXTHELP'], _
     [0x00010000, 'WS_EX_CONTROLPARENT'], _
     [0x00000001, 'WS_EX_DLGMODALFRAME'], _
     [0x00080000, 'WS_EX_LAYERED'], _
     [0x00400000, 'WS_EX_LAYOUTRTL'], _
     [0x00004000, 'WS_EX_LEFTSCROLLBAR'], _
     [0x00000040, 'WS_EX_MDICHILD'], _
     [0x08000000, 'WS_EX_NOACTIVATE'], _
     [0x00100000, 'WS_EX_NOINHERITLAYOUT'], _
     [0x00000004, 'WS_EX_NOPARENTNOTIFY'], _
     [0x00001000, 'WS_EX_RIGHT'], _
     [0x00002000, 'WS_EX_RTLREADING'], _
     [0x00020000, 'WS_EX_STATICEDGE'], _
     [0x00000080, 'WS_EX_TOOLWINDOW'], _
     [0x00000008, 'WS_EX_TOPMOST'], _
     [0x00000020, 'WS_EX_TRANSPARENT'], _
     [0x00000100, 'WS_EX_WINDOWEDGE']]

Global $_XPos = 8 ; ((-1) - Default)
Global $_YPos = 8 ; ((-1) - Default)
;~Global $_About = 0 ; (1/0)
Global $_Width = 421
Global $_Height = 653
Global $_Top = 1 ; (0/1)
Global $_Position = 0 ; (0 - Absolute; 1 - Window; 2 - Client; 3 - Control)
Global $_Color = 0 ; (0 - RGB; 1 - BGR)
Global $_Crosshair = 1 ; (0/1)
Global $_Highlight = 1 ; (0/1)
Global $_Frame = 0xFF0000
Global $_Alpha = 192
Global $_Fade = 1 ; (0/1)
Global $_Code = 1 ; (0 - ANSI; 1 - Unicode; 2 - Unicode (Big Endian); 3 - UTF8)
Global $_Icon = 1 ; (0/1)
Global $_Tab = 0 ; (0 - Window; 1 - Control; 2 - Capture; 3 - AutoIt)
Global $_Rgb[3] = [0x000000, 0x9C9C9C, 0xE00000] ; (Visible, Hidden, Missing)
Global $_Column[11] = [98 + 48 * @AutoItX64, 176 - 48 * @AutoItX64, 38, 44, 124, 44, 82 + 48 * @AutoItX64, 124, 140, 60, 267] ; (Handle, Class, NN, ID | Process, PID, Handle, Class, Title, Version, Path)
Global $_Crop[2] = [349, 223] ; (Width, Height)
Global $_Capture = 0 ; (0/1)
Global $_All = 0 ; (0/1)

_ApplicationCheck()
_ReadRegistry()

Global $hWnd[2], $hForm, $hFrame, $hPopup = 0
Global $hPic[2], $hHeader[2], $hTab, $hAutoIt, $hListView, $hIL, $Combo[2], $Dummy[7], $Group, $Icon[2], $Input[31], $Label[5], $Menu[21], $Pic, $Tab
Global $Accel[5][2] = [['^a'], ['^d'], ['^!t'], ['^!h'], ['{ENTER}']]
Global $Col[2] = [0xFF000000, 0]
Global $hCursor[8], $hBitmap, $hAbout = 0, $hRoot = 0, $hOver = 0, $hPrev = 0, $hRect = 0, $hDesktop = 0
Global $Browser = False, $Ctrl = False, $Enum = False, $Fade = False, $Hold = False, $Refresh = False
Global $Count, $Data, $ID, $Item, $Key, $List, $Msg, $Alpha = 0, $Area = 0, $Resize = -1
Global $dX, $dY, $Xi, $Yi, $Xk, $Yk, $Xn, $Yn, $Xp, $Yp, $Ci, $Cp, $Wp, $Hp
Global $hFile, $hInstance = _WinAPI_GetModuleHandle(0)
Global $PathDlg = @WorkingDir
Global $tPoint, $tRect

If Not @compiled Then
    For $i = 0 To 7
        $hCursor[$i] = _WinAPI_LoadCursorFromFile(@ScriptDir & '\Resources\' & (100 + $i) & '.cur')
    Next
Else
    For $i = 0 To 7
        $hCursor[$i] = _WinAPI_LoadCursor($hInstance, 100 + $i)
    Next
EndIf
If _WinAPI_IsThemeActive() Then
    $Col[0] = 0xFF3E60C5
    $Col[1] = 0x1E3E60C5
EndIf
If _WinAPI_GetSystemMetrics($SM_SWAPBUTTON) Then
    $Key = 0x02
Else
    $Key = 0x01
EndIf

_GDIPlus_Startup()
;~_About()
_GUICreate()

OnAutoItExitRegister('AutoItExit')

#EndRegion Initialization

#Region Body

While 1
    If (($hRoot) And (Not _WinAPI_IsWindowVisible($hRoot))) Then
        _ShowFrame(0)
        _Update(1)
        $hRoot = 0
        $hOver = 0
    EndIf
    If (($hOver) And (Not _WinAPI_IsWindowVisible($hOver))) Or (($hRect) And (Not  WinActive($hForm))) Then
        _ShowFrame(0)
        $hOver = 0
    EndIf
    If _IsDown(0x11) Then
        If Not $Ctrl Then
            _SendMessage($hForm, $WM_SETCURSOR)
        EndIf
        $Ctrl = 1
    Else
        If $Ctrl Then
            _SendMessage($hForm, $WM_SETCURSOR)
        EndIf
        $Ctrl = 0
    EndIf
    $Msg = GUIGetMsg()
    Switch $Msg
        Case 0
            ContinueLoop
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Icon[0]
            _ShowFrame(0)
            _WinAPI_SetFocus($hListView)
            If Not @compiled Then
                GUICtrlSetImage($Icon[0], @ScriptDir & '\Resources\201.ico')
            Else
                GUICtrlSetImage($Icon[0], @ScriptFullPath, 201)
            EndIf
            $Browser = 1
            $Xp = -1
            $Yp = -1
            $Cp = -1
            $hRoot = 0
            $hOver = 0
            $hPrev = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, $IDI_APPLICATION))
            If $hPrev Then
                _WinAPI_SetSystemCursor($hCursor[0], $IDI_APPLICATION, 1)
            EndIf
            Opt('GUIOnEventMode', 1)
            GUISetState(@SW_DISABLE, $hForm)
            While _IsDown($Key)
;~              If $hRect Then
;~                  WinSetOnTop($hFrame, '', 1)
;~              EndIf
;~              Sleep(1)
                $tPoint = _WinAPI_GetMousePos()
                $Xi = DllStructGetData($tPoint, 1)
                $Yi = DllStructGetData($tPoint, 2)
                If $Fade Then
                    $Ci = -1
                EndIf
                If ($Xi <> $Xp) Or ($Yi <> $Yp) Or ($Ci <> $Cp) Then
                    $hBitmap = _Capture_X3($Xi - 11, $Yi - 11, 23, 23, 69, 69)
                    $Ci = @extended
                    If $hBitmap Then
                        If $Ci <> $Cp Then
                            GUICtrlSetBkColor($Label[0], $Ci)
                            Switch $_Color
                                Case 0 ; RGB
                                    $Data = $Ci
                                Case 1 ; BGR
                                    $Data = _WinAPI_SwitchColor($Ci)
                            EndSwitch
                            GUICtrlSetData($Input[2], '0x' & Hex($Data, 6))
                        EndIf
                    Else
                        If $Ci <> $Cp Then
                            GUICtrlSetBkColor($Label[0], _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
                            GUICtrlSetData($Input[2], '')
                        EndIf
                    EndIf
                    _SetBitmap($hPic[0], $hBitmap)
                    If $_Capture Then
                        _SetBitmap($hPic[1], _Capture_X1($Xi - Floor(($_Crop[0] - 10) / 2), $Yi - Floor(($_Crop[1] - 10) / 2), $_Crop[0] - 10, $_Crop[1] - 10, $Col[0], 0, 1), 1)
                        If BitAND(GUICtrlGetState($Label[4]), $GUI_SHOW) Then
                            GUICtrlSetState($Label[4], $GUI_HIDE)
                        EndIf
                    EndIf
                    $Xp = $Xi
                    $Yp = $Yi
                    $Cp = $Ci
                EndIf
                $hWnd[0] = _WinAPI_GetAncestor(_WinAPI_WindowFromPoint($tPoint), $GA_ROOT)
                Switch $_Position
                    Case 0 ; Absolute
                        For $i = 0 To 1
                            _SetData($Input[$i], DllStructGetData($tPoint, $i + 1))
                        Next
                    Case 1, 2 ; Window, Client
                        If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                            If _WinAPI_IsWindow($hRoot) Then
                                $Data = $hRoot
                            Else
                                $Data = 0
                            EndIf
                        Else
                            $Data = $hWnd[0]
                        EndIf
                        If $Data Then
                            Switch $_Position
                                Case 1 ; Window
                                    $tRect = _WinAPI_GetWindowRect($Data)
                                Case 2 ; Client
                                    $tRect = _WinAPI_GetClientRect($Data)
                                    If _WinAPI_ScreenToClient($Data, $tRect) Then
                                        For $i = 1 To 2
                                            DllStructSetData($tRect, $i + 2, DllStructGetData($tRect, $i + 2) - DllStructGetData($tRect, $i))
                                            DllStructSetData($tRect, $i, -DllStructGetData($tRect, $i))
                                        Next
                                    Else
                                        $tRect = 0
                                    EndIf
                            EndSwitch
                        Else
                            $tRect = 0
                        EndIf
;~                      If True Then
                            If _PtInRect($tRect, $tPoint) Then
                                For $i = 0 To 1
                                    _SetData($Input[$i], DllStructGetData($tPoint, $i + 1) - DllStructGetData($tRect, $i + 1))
                                Next
                            Else
                                For $i = 0 To 1
                                    _SetData($Input[$i], '')
                                Next
                            EndIf
;~                      EndIf
                    Case 3 ; Control
                        If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                            If $hOver Then
                                $tRect = _WinAPI_GetWindowRect($hOver)
                            Else
                                $tRect = 0
                            EndIf
                            If _PtInRect($tRect, $tPoint) Then
                                For $i = 0 To 1
                                    _SetData($Input[$i], DllStructGetData($tPoint, $i + 1) - DllStructGetData($tRect, $i + 1))
                                Next
                            Else
                                For $i = 0 To 1
                                    _SetData($Input[$i], '')
                                Next
                            EndIf
                        EndIf
                EndSwitch
                If ($hWnd[0] = $hForm) Or ($hWnd[0] = $hFrame) Then
                    If ($hOver) And (Not _WinAPI_IsWindowVisible($hOver)) Then
                        If $hRect Then
                            _ShowFrame(0)
                        EndIf
                        $Xp = -1
                        $Yp = -1