JoshuaBarnette

Other Window Control Highlighting

2 posts in this topic

#1 ·  Posted (edited)

I would like to choose a window from a list, gather all the controls on that window, then select a control from the resulting list and "highlight" it on the original window much like is done in either the AutoIT Info Tool or Yashied's Control Viewer. The issues that I am having are:

  1. Identifying when the ListView is clicked and what row is clicked
  2. Then highlighting the field on the original window

The reason for this script is not just for visualizing the controls, but to help identify specific pixel positions and colors for controls that require ControlClick such as a list of CheckBoxes in a List that does not list specific control IDs for each.

So far I have the code below, I have also attached the non-standard (not out of the box) UDFs I am using:

; ======================================================================================================================================================
; = Resize A Window Script                                                                                                                             =
; ======================================================================================================================================================
#Region ; Script ChangeLog
; ======================================================================================================================================================
    Dim $Script_ChangeLog[3][2]

    $Script_ChangeLog[1][0] = "Version"
    $Script_ChangeLog[1][1] = "ChangeLog"
    $Script_ChangeLog[2][0] = "15.10.28"
    $Script_ChangeLog[2][1] = "Original Script."

    $Script_ChangeLog[0][0] = UBound($Script_ChangeLog) - 1
    $Script_ChangeLog[0][1] = "Entries"

    _ArraySort($Script_ChangeLog, 1, 2, 0, 0)
; ======================================================================================================================================================
#EndRegion ; Script ChangeLog
; ======================================================================================================================================================
#Region ; Necessary Options
; ======================================================================================================================================================
    Opt("GUICloseOnESC", 0) ; 0=ESC Won't Close, 1=ESC Closes
    Opt("TrayIconHide", 1) ; 1=Hides Icon, 0=Shows Icon
    Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown.
    ; ==================================================================================================================================================
    Global $Script_Name = FileGetVersion(@ScriptFullPath, "ProductName")
    Global $Script_Version = FileGetVersion(@ScriptFullPath, "ScriptVersion")
    Global $Script_FileName = FileGetVersion(@ScriptFullPath, "OriginalFileName")
; ======================================================================================================================================================
#EndRegion ; Necessary Options
; ======================================================================================================================================================
#Region ; Necessary Includes
; ======================================================================================================================================================
    $Script_Exists = ProcessList(@ScriptName)
    If $Script_Exists[0][0] > 1 Then
;       MsgBox(64, $Script_Name & ' Warning', 'An instance of this application is already running.')
        If WinExists($Script_Name & " " & $Script_Version) Then
            WinActivate($Script_Name & " " & $Script_Version)
        Else
            Send("^!w")
        EndIf
        Exit
    EndIf
    ; ==================================================================================================================================================
    #Region ; JB2_SplashScreen Dependencies
    ; ==================================================================================================================================================
        Global Const $JB2_SplashScreen_AC_SRC_ALPHA = 1
        #Include <Resources.au3>
        #Include <GUIConstantsEx.au3>
        #Include <StaticConstants.au3>
        #Include <WindowsConstants.au3>
    ; ==================================================================================================================================================
    #EndRegion ; JB2_SplashScreen Dependencies
    ; ==================================================================================================================================================
    JB2_SplashScreen("On")
    JB2_SplashScreen("Update", "Loading Dependencies...")
    #Include <Array.au3>
    #Include <ShowMonitorInfo.au3>
    #Include <TrayMenuIcons.au3>
    #Include <WinAPI.au3>
    ; ==================================================================================================================================================
    #Region ; GUI Includes
    ; ==================================================================================================================================================
        #Include <ButtonConstants.au3>
        #Include <Constants.au3>
        #Include <ComboConstants.au3>
        #Include <EditConstants.au3>
        #Include <GDIPlus.au3>
        #Include <GuiButton.au3>
        #Include <GuiEdit.au3>
        #Include <GUIExtender.au3>
        #Include <GuiListBox.au3>
        #Include <GuiListView.au3>
        #include <ListboxConstants.au3>
        #Include <ListviewConstants.au3>
        #Include <Misc.au3>
        #Include <ScrollBarConstants.au3>
    ; ==================================================================================================================================================
    #EndRegion ; GUI Includes
; ======================================================================================================================================================
#EndRegion ; Necessary Includes
; ======================================================================================================================================================
#Region ; Necessary Variables
; ======================================================================================================================================================
    HotKeySet("^!p", "Pixels2Table_GUI")
    HotKeySet("^!q", "_OnExitWithMsg")
; ======================================================================================================================================================
    If StringInStr(@OSVersion, "7") Then
        $Taskbar_Specs = ControlGetPos("[Class:Shell_TrayWnd]", "", "ToolbarWindow321")
    Else
        $Taskbar_Specs = ControlGetPos("[Class:Shell_TrayWnd]", "", "ToolbarWindow322")
    EndIf
    If $Taskbar_Specs[3] = "" Then
        $Taskbar_Specs[3] = 22
    EndIf
    Global $Progress_Top = Number(@DesktopHeight - Number(138 + $Taskbar_Specs[3])); Progress Window Default Height Is 128 Offset By 10 For Effect & 46 For TaskBar
    Global $Progress_Left = Number(@DeskTopWidth - 316); Progress Window Default Width Is 306 Offset By 10 For Effect
; ======================================================================================================================================================
    Global $WindowList = ''
    Global $RWG_GUI = 'Closed'
    Global $RWG_OpenWindow_List = ''
    Global $RWG_OpenWindow_List_Content = ''
    Global $RWG_OpenWindow_List_CurrentContent = ''
    Global $RWG_WindowTitle_Edit = ''
    Global $RWG_WindowStart_Edit = ''
    Global $RWG_WindowResolution_Edit = ''
    Global $RWG_WindowState_Edit = ''
    Global $RWG_WindowMonitor_Edit = ''
    Global $RWG_WindowMonitorResolution_Edit = ''
    Global $RWG_WindowControlVisible_CheckBox = ''
    Global $RWG_WindowControlVisible = True
    Global $RWG_WindowControl_ListView = ''
; ======================================================================================================================================================
    Global $P2T_FileName = @TempDir & '\P2T_Layout.html'
    Global $P2T_Header = '<!DOCTYPE html>' & @CRLF & _
                         '<html>' & @CRLF & _
                         @TAB & '<head>' & @CRLF & _
                         @TAB & @TAB & '<title>Pixel To Table</title>' & @CRLF & _
                         @TAB & @TAB & '<meta charset="UTF-8">' & @CRLF & _
                         @TAB & @TAB & '<style>' & @CRLF & _
                         @TAB & @TAB & @TAB & 'td' & @CRLF & _
                         @TAB & @TAB & @TAB & '{' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'position: relative;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'color: rgb(0,0,0);' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'height: 35px;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'width: 35px;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-family: Calibri, Arial, sans-serif;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-size: xx-small;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'text-align: center;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'text-decoration: none;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'z-index: 20;' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & @TAB & 'td span.cellcontent' & @CRLF & _
                         @TAB & @TAB & @TAB & '{' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'display: block;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'min-width: 35px;' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & @TAB & 'td:hover' & @CRLF & _
                         @TAB & @TAB & @TAB & '{' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'z-index: 30; ' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & @TAB & 'td span.hoverbox' & @CRLF & _
                         @TAB & @TAB & @TAB & '{' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'display: none;' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & @TAB & 'td:hover span.hoverbox' & @CRLF & _
                         @TAB & @TAB & @TAB & '{ ' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'display: block;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'position: absolute;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'top: 30px; ' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'left: 30px; ' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'width: 200px; /* auto */' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'padding: 10px;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'color: rgb(255,255,255);' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-family: Cambria, Times New Roman, serif;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-size: 24px;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-weight: bold;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'text-align: left;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'line-height: 28px;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'border: 1px solid rgb(51,51,51);' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'background-color: rgb(102,102,102);' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & @TAB & 'span.hoverboxbody' & @CRLF & _
                         @TAB & @TAB & @TAB & '{' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-family: Calibri, Arial, sans-serif;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-size: 20px; ' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'font-weight: normal;' & @CRLF & _
                         @TAB & @TAB & @TAB & @TAB & 'line-height: 22px;' & @CRLF & _
                         @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _
                         @TAB & @TAB & '</style>' & @CRLF & _
                         @TAB & '</head>' & @CRLF & _
                         @TAB & '<body>' & @CRLF & _
                         @TAB & @TAB & '<table style="border-collapse: collapse;">' & @CRLF
    Global $P2T_Footer = @TAB & @TAB & '</table>' & @CRLF & _
                         @TAB & '</body>' & @CRLF & _
                         '</html>' & @CRLF & @CRLF
; ======================================================================================================================================================
#EndRegion ; Necessary Variables
; ======================================================================================================================================================
JB2_SplashScreen("Off")
; ======================================================================================================================================================
#Region ; Script Body
; ======================================================================================================================================================
$RWG_GUI = GUICreate($Script_Name & " " & $Script_Version, 780, 680, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX))
; ==================================================================================================================================
#Region ; Menu Section
; ==================================================================================================================================
    $RWG_File_Menu = GUICtrlCreateMenu('&File')
        $RWG_Exit_MenuItem = GUICtrlCreateMenuItem('E&xit' & @TAB & 'Ctrl+Alt+Q', $RWG_File_Menu)
    $RWG_View_Menu = GUICtrlCreateMenu('&View')
        $RWG_RefreshWindowList_MenuItem = GUICtrlCreateMenuItem('&Refresh Window List...', $RWG_View_Menu)
    $RWG_Help_Menu = GUICtrlCreateMenu('&Help')
        $RWG_ChangeLog_MenuItem = GUICtrlCreateMenuItem('View Change &Log...', $RWG_Help_Menu)
        GUICtrlCreateMenuItem('', $RWG_Help_Menu)
        $RWG_About_MenuItem = GUICtrlCreateMenuItem('&About...', $RWG_Help_Menu)
; ==================================================================================================================================
#EndRegion ; Menu Section
; ==================================================================================================================================
    $RWG_OpenWindow_Label = GUICtrlCreateLabel("Select A Window To Resize:", 10, 10, 600, 20, $SS_CENTER)
    $RWG_OpenWindow_List = GUICtrlCreateList("", 10, 30, 600, 300)
        Refresh_WindowList(0)
    $RWG_WindowInfo_Label = GUICtrlCreateLabel("Window Information:", 620, 10, 150, 20, $SS_CENTER)
    GUICtrlCreateGroup('', 620, 23, 150, 260)
        $RWG_WindowMonitor_Label = GUICtrlCreateLabel("Located On:", 630, 40, 130, 20, $SS_CENTER)
            GUICtrlSetBkColor($RWG_WindowMonitor_Label, $GUI_BKCOLOR_TRANSPARENT)
        $RWG_WindowMonitor_Edit = GUICtrlCreateEdit("", 630, 60, 130, 22, BitOR($ES_READONLY, $ES_CENTER))
        $RWG_WindowStart_Label = GUICtrlCreateLabel("Start Position (Left x Top):", 630, 85, 130, 20, $SS_CENTER)
            GUICtrlSetBkColor($RWG_WindowStart_Label, $GUI_BKCOLOR_TRANSPARENT)
        $RWG_WindowStart_Edit = GUICtrlCreateEdit("", 630, 105, 130, 22, BitOR($ES_READONLY, $ES_CENTER))
        $RWG_WindowResolution_Label = GUICtrlCreateLabel("Current Resolution:", 630, 130, 130, 20, $SS_CENTER)
            GUICtrlSetBkColor($RWG_WindowResolution_Label, $GUI_BKCOLOR_TRANSPARENT)
        $RWG_WindowResolution_Edit = GUICtrlCreateEdit("", 630, 150, 130, 22, BitOR($ES_READONLY, $ES_CENTER))
        $RWG_WindowState_Label = GUICtrlCreateLabel("Maximized Or Minimized:", 630, 180, 130, 20, $SS_CENTER)
            GUICtrlSetBkColor($RWG_WindowState_Label, $GUI_BKCOLOR_TRANSPARENT)
        $RWG_WindowState_Edit = GUICtrlCreateEdit("", 630, 200, 130, 22, BitOR($ES_READONLY, $ES_CENTER))
        $RWG_WindowMonitorResolution_Label = GUICtrlCreateLabel("Monitor Resolution:", 630, 225, 130, 20, $SS_CENTER)
            GUICtrlSetBkColor($RWG_WindowMonitorResolution_Label, $GUI_BKCOLOR_TRANSPARENT)
        $RWG_WindowMonitorResolution_Edit = GUICtrlCreateEdit("", 630, 245, 130, 22, BitOR($ES_READONLY, $ES_CENTER))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $RWG_Process_Button = GUICtrlCreateButton('Process Pixels', 620, 293, 150, 30, $BS_DEFPUSHBUTTON)
    $RWG_WindowControl_Label = GUICtrlCreateLabel("Window Controls:", 10, 330, 600, 20, $SS_CENTER)
    $RWG_WindowControlVisible_CheckBox = GUICtrlCreateCheckbox("Show Only Visible Controls", 625, 325)
        GUICtrlSetState($RWG_WindowControlVisible_CheckBox, $GUI_CHECKED)
    $RWG_WindowControl_ListView = GUICtrlCreateListView("Control Handle|Class|Instance|ID|Visible|Left (X)|Top (Y)|Width|Height|Control Text", 10, 350, 760, 300, BitOr($LVS_NOSORTHEADER, $LVS_SINGLESEL), BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE))
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 0, 112)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 0, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 2, 63)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 2, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 4, 56)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 4, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 5, 56)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 5, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 6, 56)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 6, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 7, 56)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 7, 2)
        _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 8, 56)
        _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 8, 2)
        GUICtrlSetBkColor($RWG_WindowControl_ListView, $GUI_BKCOLOR_LV_ALTERNATE)

    Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List))
    Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible)

    GUISetState()

    _GUICtrlListView_ClickItem($RWG_WindowControl_ListView, 0)

    WinSetOnTop($RWG_GUI, '', 1)

    While 1
        $RWG_Msg = GUIGetMsg()
        Switch $RWG_Msg
            Case $GUI_EVENT_CLOSE, $RWG_Exit_MenuItem
                _OnExit()
            Case $RWG_RefreshWindowList_MenuItem
                Refresh_WindowList(0)
                Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible)
            Case $RWG_About_MenuItem
                GUISetState(@SW_DISABLE, $RWG_GUI)
                JB2_ThankYou(0, $RWG_GUI, $Script_Name, $Script_Version)
                GUISetState(@SW_ENABLE, $RWG_GUI)
            Case $RWG_ChangeLog_MenuItem
                GUISetState(@SW_DISABLE, $RWG_GUI)
                JB2_ChangeLog($RWG_GUI, $Script_Name, $Script_Version)
                GUISetState(@SW_ENABLE, $RWG_GUI)
            Case $RWG_OpenWindow_List
                Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List))
                Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible)
            Case $RWG_WindowControlVisible_CheckBox
                If BitAND(GUICtrlRead($RWG_WindowControlVisible_CheckBox), $GUI_CHECKED) = $GUI_CHECKED Then
                    $RWG_WindowControlVisible = True
                Else
                    $RWG_WindowControlVisible = False
                EndIf
                Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible)
            Case $RWG_WindowControl_ListView
                MsgBox(4096, 'Test', _GUICtrlListView_GetSelectedIndices($RWG_WindowControl_ListView), -1, $RWG_GUI)
            Case $RWG_Process_Button
                $RWG_PB_CurrentSelection = _GUICtrlListView_GetSelectionMark($RWG_WindowControl_ListView)
                $RWG_PB_CurrentSelection_List = _GUICtrlListView_GetItemTextArray($RWG_WindowControl_ListView, $RWG_PB_CurrentSelection)
                $hFrame = _WinAPI_GetParent($RWG_PB_CurrentSelection_List[1])
                
#cs
                GUISetState(@SW_HIDE, $RWG_GUI)
                Pixels2Table(GUICtrlRead($RWG_OpenWindow_List))
                GUISetState(@SW_SHOW, $RWG_GUI)
#CE
        EndSwitch
    WEnd
; ======================================================================================================================================================
#EndRegion ; Script Body
; ======================================================================================================================================================
#Region ; Necessary Supporting Functions
; ======================================================================================================================================================
    #Region ; Get_WindowList Function
    ; ==================================================================================================================================================
        Func Get_WindowList()
            $WindowList = ''
            $Temp_WindowList = WinList()
            $Temp_WindowList_Content = ''

            Dim $WindowList[$Temp_WindowList[0][0]+1][3] ; Declared Globally At The Beginning

            $WindowList[0][0] = $Temp_WindowList[0][0]+1
            For $w = 1 To $Temp_WindowList[0][0]
                ; Windows To Ignore, Both Windows Without A Title And A Windows That Are Not Actually Visible
                If $Temp_WindowList[$w][0] = '' Or $Temp_WindowList[$w][0] = $Script_Name & " " & $Script_Version Or $Temp_WindowList[$w][0] = 'BBar' Or $Temp_WindowList[$w][0] = 'ICA Seamless Host Agent' Or $Temp_WindowList[$w][0] = 'Message' Or $Temp_WindowList[$w][0] = 'OLEChannelWnd' Or $Temp_WindowList[$w][0] = 'Program Manager' Or $Temp_WindowList[$w][0] = 'Splash GUI' Or $Temp_WindowList[$w][0] = 'Start' Or StringRight($Temp_WindowList[$w][0], 5) = 'Toast' Then ContinueLoop

                ; Gets The Handle of The Current Window
                $Temp_WindowState =  WinGetState($Temp_WindowList[$w][1])
#CS
                ; Filtering Windows Based On Window State
                ConsoleWrite($aWindows[$i][0] & ': ')
                If BitAND($Temp_WindowState, 1) = 1 Then ConsoleWrite(' exists')
                If BitAND($Temp_WindowState, 2) = 2 Then ConsoleWrite(' visible')
                If BitAND($Temp_WindowState, 4) = 4 Then ConsoleWrite(' enabled')
                If BitAND($Temp_WindowState, 8) = 8 Then ConsoleWrite(' active')
                If BitAND($Temp_WindowState, 16) = 16 Then ConsoleWrite(' minimized')
                If BitAND($Temp_WindowState, 32) = 32 Then ConsoleWrite(' maximized')
                ConsoleWrite(@CRLF)
#CE
                If BitAND($Temp_WindowState, 2) = 2 Then
                    $WindowList[$w][0] = $Temp_WindowList[$w][0]
                    $WindowList[$w][1] = $Temp_WindowList[$w][1]
                    If BitAND($Temp_WindowState, 8) = 8 Then $WindowList[$w][2] &= 'Active / '
                    If BitAND($Temp_WindowState, 16) = 16 Then $WindowList[$w][2] &= 'Minimized / '
                    If BitAND($Temp_WindowState, 32) = 32 Then $WindowList[$w][2] &= 'Maximized'
                    If StringRight($WindowList[$w][2], 3) = ' / ' Then $WindowList[$w][2] = StringTrimRight($WindowList[$w][2], 3)
                    If StringInStr($Temp_WindowList[$w][0], '|') Then $Temp_WindowList[$w][0] = StringReplace($Temp_WindowList[$w][0], '|', '[JB' & Chr(178) & ']')
                    $Temp_WindowList_Content &= $Temp_WindowList[$w][0] & '|'
                EndIf
            Next

            _ArraySort($WindowList, 0, 1, 0, 0)
            $WindowList = JB2_DeleteEmpty2DArrayRows($WindowList) ; Column Structure: 0 = WindowTitle / 1 = WindowHandle
            $WindowList[0][0] = UBound($WindowList) - 1

            If StringRight($Temp_WindowList_Content, 1) = '|' Then $Temp_WindowList_Content = StringTrimRight($Temp_WindowList_Content, 1)
            Return $Temp_WindowList_Content
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; Get_WindowList Function
    ; ==================================================================================================================================================
    #Region ; Get_WindowInfo Function
    ; ==================================================================================================================================================
        Func Get_WindowInfo($GWL_Title)
            GUICtrlSetData($RWG_WindowTitle_Edit, '')
            GUICtrlSetData($RWG_WindowStart_Edit, '')
            GUICtrlSetData($RWG_WindowResolution_Edit, '')
            GUICtrlSetData($RWG_WindowState_Edit, '')
            GUICtrlSetData($RWG_WindowMonitor_Edit, '')
            GUICtrlSetData($RWG_WindowMonitorResolution_Edit, '')
            $GWL_TempState = ''
            If StringInStr($GWL_Title, '[JB' & Chr(178) & ']') Then $GWL_Title = StringReplace($GWL_Title, '[JB' & Chr(178) & ']', '|')
            $GWL_CurrentWindow_ListPosition = _ArraySearch($WindowList, $GWL_Title)
            $GWL_Handle = $WindowList[$GWL_CurrentWindow_ListPosition][1]
            If StringInStr($WindowList[$GWL_CurrentWindow_ListPosition][2], 'Maximized') Then
                $GWL_State = 'Maximized'
            ElseIf StringInStr($WindowList[$GWL_CurrentWindow_ListPosition][2], 'Minimized') Then
                $GWL_State = 'Minimized'
            Else
                $GWL_State = 'No'
            EndIf

            _GetMonitors()

            If $GWL_State = 'Minimized' Then
                WinSetState($GWL_Handle, '', @SW_RESTORE)
                $GWL_TempState = WinGetState($GWL_Handle) ; To Determine If The Minimized Window Is Maximized If Restored.
                $Temp_WinInfo = WinGetPos($GWL_Handle)
                WinSetState($GWL_Handle, '', @SW_MINIMIZE)
            Else
                $Temp_WinInfo = WinGetPos($GWL_Handle)
            EndIf

            If IsArray($Temp_WinInfo) Then
                If UBound($Temp_WinInfo) = 4 Then
                    If $GWL_State = 'Maximized' Or BitAND($GWL_TempState, 32) = 32 Then
                        $Temp_WinInfo[0] += 8
                        $Temp_WinInfo[1] += 8
                    EndIf

                    $GWL_Monitor = _GetMonitorFromPoint($Temp_WinInfo[0], $Temp_WinInfo[1])

                    GUICtrlSetData($RWG_WindowStart_Edit, $Temp_WinInfo[0] & 'x' & $Temp_WinInfo[1])
                    GUICtrlSetData($RWG_WindowResolution_Edit, $Temp_WinInfo[2] & 'x' & $Temp_WinInfo[3])
                    GUICtrlSetData($RWG_WindowState_Edit, $GWL_State)
                    GUICtrlSetData($RWG_WindowMonitor_Edit, 'Monitor ' & $GWL_Monitor)
                    GUICtrlSetData($RWG_WindowMonitorResolution_Edit, $__MonitorList[$GWL_Monitor][5] & 'x' & $__MonitorList[$GWL_Monitor][6])
                Else
                    Refresh_WindowList(1, 'The selected window is no longer available.')
                    Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List))
                EndIf
            Else
                Refresh_WindowList(1, 'The selected window is no longer available.')
                Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List))
            EndIf
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; Get_WindowInfo Function
    ; ==================================================================================================================================================
    #Region ; Get_WindowControls Function
    ; ==================================================================================================================================================
        Func Get_WindowControls($GWC_Title, $GWC_Visible = True)
            _GUICtrlListView_BeginUpdate($RWG_WindowControl_ListView)
            _GUICtrlListView_DeleteAllItems($RWG_WindowControl_ListView)
            $RWG_WindowControl_ListView_1Width = 13
            $RWG_WindowControl_ListView_3Width = 7
            $RWG_WindowControl_ListView_9Width = 12
            If StringLen($GWC_Title) > $RWG_WindowControl_ListView_9Width Then $RWG_WindowControl_ListView_9Width = StringLen($GWC_Title)

            If StringInStr($GWC_Title, '[JB' & Chr(178) & ']') Then $GWC_Title = StringReplace($GWC_Title, '[JB' & Chr(178) & ']', '|')
            $GWC_CurrentWindow_ListPosition = _ArraySearch($WindowList, $GWC_Title)
            $GWC_Handle = $WindowList[$GWC_CurrentWindow_ListPosition][1]
            $Temp_WinInfo = WinGetPos($GWC_Handle)

            _GUICtrlListView_AddItem($RWG_WindowControl_ListView, $GWC_Handle, 0)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 'Entire Window', 1)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 0, 2)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 0, 3)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 1, 4)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[0], 5)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[1], 6)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[2], 7)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[3], 8)
            _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $GWC_Title, 9)

            $GWC_ControlList = JB2_GetWindowControls($GWC_Handle, $GWC_Visible)

            For $li = 1 To $GWC_ControlList[0][0]
                If StringLen($GWC_ControlList[$li][1]) > $RWG_WindowControl_ListView_1Width Then $RWG_WindowControl_ListView_1Width = StringLen($GWC_ControlList[$li][1])
                If StringLen($GWC_ControlList[$li][3]) > $RWG_WindowControl_ListView_3Width Then $RWG_WindowControl_ListView_3Width = StringLen($GWC_ControlList[$li][3])
                If StringLen($GWC_ControlList[$li][9]) > $RWG_WindowControl_ListView_9Width Then $RWG_WindowControl_ListView_9Width = StringLen($GWC_ControlList[$li][9])

                Assign("$RWG_WindowControl_ListView_Row" & Number($li),GUICtrlCreateListViewItem($GWC_ControlList[$li][0] & "|" & $GWC_ControlList[$li][1] & "|" & $GWC_ControlList[$li][2] & "|" & $GWC_ControlList[$li][3] & "|" & $GWC_ControlList[$li][4] & "|" & $GWC_ControlList[$li][5] & "|" & $GWC_ControlList[$li][6] & "|" & $GWC_ControlList[$li][7] & "|" & $GWC_ControlList[$li][8] & "|" & $GWC_ControlList[$li][9], $RWG_WindowControl_ListView))
                GUICtrlSetBkColor(-1, 0xcccccc)
            Next

            _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 1, Number(($RWG_WindowControl_ListView_1Width + 1) * 8)) ; 8px average width of characters at 8pt font.
            _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 1)
            _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 3, Number(($RWG_WindowControl_ListView_3Width + 1) * 7)) ; 7px average width of characters at 8pt numeric font.
            _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 3, 2)
            _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 9, Number(($RWG_WindowControl_ListView_9Width + 1) * 8)) ; 8px average width of characters at 8pt font.
            _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 9)

            _GUICtrlListView_EndUpdate($RWG_WindowControl_ListView)

            _GUICtrlListView_ClickItem($RWG_WindowControl_ListView, 0)
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; Get_WindowControls Function
    ; ==================================================================================================================================================
    #Region ; Pixels2Table Function
    ; ==================================================================================================================================================
        Func Pixels2Table($P2T_Window)
            ProgressOn("Converting Pixels To HTML Table", "", "", $Progress_Left, $Progress_Top, 2)
            $P2T_CurrentWindow_ListPosition = _ArraySearch($WindowList, $P2T_Window)
            If StringInStr($WindowList[$P2T_CurrentWindow_ListPosition][2], 'Minimized') Then WinSetState($WindowList[$P2T_CurrentWindow_ListPosition][1], '', @SW_RESTORE)
            $P2T_CurrentWindow_Position = WinGetPos($WindowList[$P2T_CurrentWindow_ListPosition][1])
            If StringLen($P2T_CurrentWindow_Position[2]) >= StringLen($P2T_CurrentWindow_Position[3]) Then
                $P2T_XYDigits = StringLen($P2T_CurrentWindow_Position[2])
            Else
                $P2T_XYDigits = StringLen($P2T_CurrentWindow_Position[3])
            EndIf
            WinActivate($WindowList[$P2T_CurrentWindow_ListPosition][1])
            $ProgressTotalItems = Number($P2T_CurrentWindow_Position[2] * $P2T_CurrentWindow_Position[3])
            $ProgressPercentPer = Number(100/$ProgressTotalItems)
            $ProgressProgress = 0
            $ProgressPercent = 0
            $ProgressLabel1 = "0 of " & $ProgressTotalItems & " Pixels(s)"
            $ProgressLabel2 = "0% Completed."
            ProgressSet($ProgressPercent, $ProgressLabel1 & " / " & $ProgressLabel2)
        ; ==============================================================================================================================================
            $P2T_FileHandle = FileOpen($P2T_FileName, 2)
            FileWrite($P2T_FileHandle, $P2T_Header)
        ; ==============================================================================================================================================
            $P2T_Y = 1
            ; For $y = 1 To $P2T_CurrentWindow_Position[3]
            For $y = $P2T_CurrentWindow_Position[1] To Number($P2T_CurrentWindow_Position[1] + $P2T_CurrentWindow_Position[3])
                FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & '<tr>' & @CRLF)
            ; ==========================================================================================================================================
                $P2T_X = 1
                ; For $x = 1 To $P2T_CurrentWindow_Position[2]
                For $x = $P2T_CurrentWindow_Position[0] To Number($P2T_CurrentWindow_Position[0] + $P2T_CurrentWindow_Position[2])
                    ProgressSet($ProgressPercent, $ProgressLabel1 & " / " & $ProgressLabel2, 'Row (Y): ' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_Y) & ' / Column (X): ' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_X))
                    $Temp_P2T_Color = '#' & Hex(PixelGetColor($x, $y, $WindowList[$P2T_CurrentWindow_ListPosition][1]) , 6)
                    FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & @TAB & '<td style="background-color: ' & $Temp_P2T_Color & ';"><span class="cellcontent">' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_X) & 'X<br>' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_Y) & 'Y</span><span class="hoverbox">Pixel Infomation<br><span class="hoverboxbody">Row (Y Position): ' & $P2T_Y & '<br>Column (X Position): ' & $P2T_X & '<br>Color Code: ' & $Temp_P2T_Color & '</span></span></td>' & @CRLF)
                    $ProgressProgress += 1
                    $ProgressPercent += $ProgressPercentPer
                    $ProgressLabel1 = $ProgressProgress & " of " & $ProgressTotalItems & " Pixrls(s)"
                    $ProgressLabel2 = Round($ProgressPercent, 0) & "% Completed."
                    $P2T_X += 1
                Next
            ; ==========================================================================================================================================
                FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & '</tr>' & @CRLF)
                $P2T_Y += 1
            Next
        ; ==============================================================================================================================================
            FileWrite($P2T_FileHandle, $P2T_Footer)
            FileClose($P2T_FileHandle)
            $ProgressLabel2 = "100% Completed."
            ProgressSet(100, $ProgressLabel1 & " / " & $ProgressLabel2, "Software Installation Complete")
            Sleep(5000)
            ProgressOff()
        ; ==============================================================================================================================================
            ShellExecute($P2T_FileName)
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; Pixels2Table Function
    ; ==================================================================================================================================================
    #Region ; Refresh_WindowList Function
    ; ==================================================================================================================================================
        Func Refresh_WindowList($RWL_TrayTip, $RWL_MsgContent = '') ; $RWL_TrayTip : 0 = Off / 1 = On
            If $RWL_MsgContent <> '' And StringRight($RWL_MsgContent, 1) <> ' ' Then $RWL_MsgContent &= ' '

            If $RWL_TrayTip = 1 Then TrayTip('Resize-A-Window...', $RWL_MsgContent & 'Refreshing window list.', 10, 2)
            $RWG_OpenWindow_List_Content = Get_WindowList()
            $RWG_OpenWindow_List_CurrentContent = ''

            For $a = 1 To $WindowList[0][0]
                If StringInStr($WindowList[$a][2], 'Active') Then $RWG_OpenWindow_List_CurrentContent = $WindowList[$a][0]
            Next
            If $RWG_OpenWindow_List_CurrentContent = '' Then $RWG_OpenWindow_List_CurrentContent = $WindowList[1][0]

            GUICtrlSetData($RWG_OpenWindow_List, '', '')
            GUICtrlSetData($RWG_OpenWindow_List, $RWG_OpenWindow_List_Content, $RWG_OpenWindow_List_CurrentContent)
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; Refresh_WindowList Function
    ; ==================================================================================================================================================
    #Region ; JB2_GetWindowControls Function
    ; ============================================================================================================================================================
    ; = Name.............: JB2_GetWindowControls                                                                                                                 =
    ; = Description......: Returns all or a specified subset of controls for a given window.                                                                     =
    ; = Required Includes: Array.au3 & WinAPI.au3                                                                                                                =
    ; = Syntax...........: JB2_GetWindowControls($GWC_WindowHandle[, $GWC_VisibleOnly = False[, $GWC_ControlTextContains = ''[, $GWC_GetSpecificClasses = '']]]) =
    ; = Parameters ......: $GWC_WindowHandle - The handle (hWnd) of the window to get the controls from.                                                         =
    ; =                    $GWC_VisibleOnly - Optional: True - Retrieves only visible controls or False - Retrieves all controls.                                =
    ; =                    $GWC_ControlTextContains - Optional: Text that a control must contain to be returned.                                                 =
    ; =                    $GWC_GetSpecificClasses - Optional: A specific class to return. (i.e. Button, ComboBox, Edit, Static, Etc.)                           =
    ; = Return values....: Success - Returns an array containing window control information.                                                                     =
    ; =                    Failure - 0                                                                                                                           =
    ; = Author...........: jdelaney                                                                                                                              =
    ; = Modified.........: Joshua Barnette, JBSquaredDesigns.com (2015-10-26)                                                                                    =
    ; = Retrieved From...: https://www.autoitscript.com/forum/topic/164226-get-all-windows-controls/                                                             =
    ; = Remarks..........: If only the window handle is given all window controls are returned.                                                                  =
    ; =                                                                                                                                                          =
    ; =                    The array returned is two-dimensional and is made up as follows:                                                                      =
    ; =                    $aArray[0][0] = Number of controls returned                                                                                           =
    ; =                    $aArray[1][0] = 1st control handle (hWnd)                                                                                             =
    ; =                    $aArray[1][1] = 1st control class                                                                                                     =
    ; =                    $aArray[1][2] = 1st control class instance                                                                                            =
    ; =                    $aArray[1][3] = 1st control ID                                                                                                        =
    ; =                    $aArray[1][4] = 1st control visibility (1 - Visible, 0 - Not Visible)                                                                 =
    ; =                    $aArray[1][5] = 1st control X position realtive to window                                                                             =
    ; =                    $aArray[1][6] = 1st control Y position realtive to window                                                                             =
    ; =                    $aArray[1][7] = 1st control width                                                                                                     =
    ; =                    $aArray[1][8] = 1st control height                                                                                                    =
    ; =                    $aArray[1][9] = 1st control text                                                                                                      =
    ; =                    ...                                                                                                                                   =
    ; =                    $aArray[n][0] = nth control handle (hWnd)                                                                                             =
    ; =                    $aArray[n][1] = nth control class                                                                                                     =
    ; =                    $aArray[n][2] = nth control class instance                                                                                            =
    ; =                    $aArray[n][3] = nth control ID                                                                                                        =
    ; =                    $aArray[n][4] = nth control visibility (1 - Visible, 0 - Not Visible)                                                                 =
    ; =                    $aArray[n][5] = nth control X position realtive to window                                                                             =
    ; =                    $aArray[n][6] = nth control Y position realtive to window                                                                             =
    ; =                    $aArray[n][7] = nth control width                                                                                                     =
    ; =                    $aArray[n][8] = nth control height                                                                                                    =
    ; =                    $aArray[n][9] = nth control text                                                                                                      =
    ; =                                                                                                                                                          =
    ; ============================================================================================================================================================
        Func JB2_GetWindowControls($GWC_WindowHandle, $GWC_VisibleOnly = 0, $GWC_ControlTextContains = '', $GWC_GetSpecificClass = '')
            If Not IsHWnd($GWC_WindowHandle) Then
                ; MsgBox(16, $Script_Name & ' Error', 'To retrieve all window controls, you must provide a valid window handle (hwnd).')
                Return 0
            EndIf

            $GWC_GetClassList = WinGetClassList($GWC_WindowHandle)

            ; Create array
            $GWC_ClassList = StringSplit($GWC_GetClassList, @CRLF, 2)

            ; Sort array
            _ArraySort($GWC_ClassList)
            _ArrayDelete($GWC_ClassList, 0)

            Dim $GWC_WindowControlList[UBound($GWC_ClassList) + 1][10]
            $GWC_WindowControlList[0][0] = UBound($GWC_ClassList) + 1

            ; Loop
            $GWC_CurrentClass = ''
            $GWC_CurrentClassCount = 1
            $GWC_TotalCounter = 1

            If StringLen($GWC_GetSpecificClass) > 0 Then
                For $sc = UBound($GWC_ClassList)-1 To 0 Step - 1
                    If $GWC_ClassList[$sc] <> $GWC_GetSpecificClass Then
                        _ArrayDelete($GWC_ClassList, $sc)
                    EndIf
                Next
            EndIf

            For $cl = 0 To UBound($GWC_ClassList) - 1
                If $GWC_ClassList[$cl] = $GWC_CurrentClass Then
                    $GWC_CurrentClassCount += 1
                Else
                    $GWC_CurrentClass = $GWC_ClassList[$cl]
                    $GWC_CurrentClassCount = 1
                EndIf

                $GWC_ControlHandle = ControlGetHandle($GWC_WindowHandle, "", "[CLASSNN:" & $GWC_CurrentClass & $GWC_CurrentClassCount & "]")
                $GWC_ControlText = StringRegExpReplace(ControlGetText($GWC_WindowHandle, "", $GWC_ControlHandle), "[\n\r]", "{@CRLF}")
                $GWC_ControlPosition = ControlGetPos($GWC_WindowHandle, "", $GWC_ControlHandle)
                $GWC_CurrentClassID = _WinAPI_GetDlgCtrlID($GWC_ControlHandle)
                $GWC_ControlVisibility = ControlCommand($GWC_WindowHandle, "", $GWC_ControlHandle, "IsVisible")
                If $GWC_VisibleOnly And Not $GWC_ControlVisibility Then
    ;               $GWC_TotalCounter += 1
                    ContinueLoop
                EndIf

                If StringLen($GWC_ControlTextContains) > 0 Then
                    If Not StringInStr($GWC_ControlText, $GWC_ControlTextContains) Then
    ;                   $GWC_TotalCounter += 1
                        ContinueLoop
                    EndIf
                EndIf

                    $GWC_WindowControlList[$GWC_TotalCounter][0] = $GWC_ControlHandle
                    $GWC_WindowControlList[$GWC_TotalCounter][1] = $GWC_ClassList[$cl]
                    $GWC_WindowControlList[$GWC_TotalCounter][2] = $GWC_CurrentClassCount
                    $GWC_WindowControlList[$GWC_TotalCounter][3] = $GWC_CurrentClassID
                    $GWC_WindowControlList[$GWC_TotalCounter][4] = $GWC_ControlVisibility
                If IsArray($GWC_ControlPosition) Then
                    $GWC_WindowControlList[$GWC_TotalCounter][5] = $GWC_ControlPosition[0]
                    $GWC_WindowControlList[$GWC_TotalCounter][6] = $GWC_ControlPosition[1]
                    $GWC_WindowControlList[$GWC_TotalCounter][7] = $GWC_ControlPosition[2]
                    $GWC_WindowControlList[$GWC_TotalCounter][8] = $GWC_ControlPosition[3]
                EndIf
                    $GWC_WindowControlList[$GWC_TotalCounter][9] = $GWC_ControlText

                If Not WinExists($GWC_WindowHandle) Then ExitLoop
                $GWC_TotalCounter += 1
            Next

            $GWC_WindowControlList = JB2_DeleteEmpty2DArrayRows($GWC_WindowControlList)
            $GWC_WindowControlList[0][0] = UBound($GWC_WindowControlList) - 1

            Return $GWC_WindowControlList
        EndFunc   ;==>GetAllWindowsControls
    ; ============================================================================================================================================================
    ; = Author...........: jdelaney                                                                                                                              =
    ; = Modified.........: Joshua Barnette, JBSquaredDesigns.com (2015-10-26)                                                                                    =
    ; = Retrieved From...: https://www.autoitscript.com/forum/topic/164226-get-all-windows-controls/                                                             =
    ; ============================================================================================================================================================
    #EndRegion ; JB2_GetWindowControls Function
    ; ==================================================================================================================================================
    #Region ; OnExit Functions
    ; ==================================================================================================================================================
        Func _OnExit()
            GUIDelete($RWG_GUI)
            Exit
        EndFunc
    ; ==================================================================================================================================================
        Func _OnExitWithMsg()
            GUIDelete($RWG_GUI)
            JB2_ThankYou(2000)
            Exit
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; OnExit Functions
    ; ==================================================================================================================================================
    #Region ; JB2_DeleteEmpty2DArrayRows Function
    ; ==================================================================================================================================================
        ; = Written By: WeaponX
        ; = Retrieved From : http://www.autoitscript.com/forum/topic/97637-remove-empty-rows-in-2d-array/
        ; = Modified By: Joshua Barnette, JBSquaredDesigns.com (2014-05-28)
        ; ==============================================================================================================================================
        Func JB2_DeleteEmpty2DArrayRows($JB2_DeleteEmpty2DArrayRows_Array)
            Local $JB2_DeleteEmpty2DArrayRows_Rows = Ubound($JB2_DeleteEmpty2DArrayRows_Array,1)
            Local $JB2_DeleteEmpty2DArrayRows_Cols = Ubound($JB2_DeleteEmpty2DArrayRows_Array,2)
            Local $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Rows][$JB2_DeleteEmpty2DArrayRows_Cols]
            Local $JB2_DeleteEmpty2DArrayRows_NotEmpty
            Local $JB2_DeleteEmpty2DArrayRows_Count = 0

            ;Loop through rows
            For $Y = 0 to $JB2_DeleteEmpty2DArrayRows_Rows - 1
                $JB2_DeleteEmpty2DArrayRows_NotEmpty = 0

                ;Loop through columns
                For $X = 0 to $JB2_DeleteEmpty2DArrayRows_Cols - 1

                    ;Copy all columns to temp array even if they are all empty
                    $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Count][$X] = $JB2_DeleteEmpty2DArrayRows_Array[$Y][$X]

                    ;If even one column contains data, make sure it doesn't get deleted
                    If $JB2_DeleteEmpty2DArrayRows_Array[$Y][$X] <> "" Then $JB2_DeleteEmpty2DArrayRows_NotEmpty = BitOr($JB2_DeleteEmpty2DArrayRows_NotEmpty, 1)
                Next

                ;If the row has any data, increment, else keep overwriting last row until it contains something
                If $JB2_DeleteEmpty2DArrayRows_NotEmpty Then $JB2_DeleteEmpty2DArrayRows_Count += 1
            Next

            Redim $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Count][$JB2_DeleteEmpty2DArrayRows_Cols]
            $JB2_DeleteEmpty2DArrayRows_Temp[0][0] = UBound($JB2_DeleteEmpty2DArrayRows_Temp) - 1
            Return $JB2_DeleteEmpty2DArrayRows_Temp
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; JB2_DeleteEmpty2DArrayRows Function
    ; ==================================================================================================================================================
    #Region ; JB2_SplashScreen & Supporting Functions
    ; ==================================================================================================================================================
        #Region ; JB2_SplashScreen
        ; ==============================================================================================================================================
            Func JB2_SplashScreen($JB2_SplashScreen_Status, $JB2_SplashScreen_Status_Message = "")
                If $JB2_SplashScreen_Status = "On" Then
                    Global $JB2_SplashScreen_Image = _ResourceGetAsImage("JB2_SplashScreen_Image", $RT_RCDATA)

                    ; Extract image width and height from PNG
                    Global $JB2_SplashScreen_Width = _GDIPlus_ImageGetWidth($JB2_SplashScreen_Image)
                    Global $JB2_SplashScreen_Height = _GDIPlus_ImageGetHeight($JB2_SplashScreen_Image)

                    ; Create layered window
                    Global $JB2_SplashScreen_GUI = GUICreate("Splash GUI", $JB2_SplashScreen_Width, $JB2_SplashScreen_Height, -1, -1, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle(AutoItWinGetTitle()))
                    JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, 0)
                    GUISetState(@SW_SHOW)

                    ;fade in png background
                    For $i = 0 To 255 Step 17
                        JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, $i)
                        Sleep(50)
                    Next

                    ; create child MDI gui window to hold controls
                    Global $JB2_SplashScreen_GUI_Child = GUICreate("Splash GUI Child", $JB2_SplashScreen_Width-20, 17, 10, $JB2_SplashScreen_Height+5, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $JB2_SplashScreen_GUI)

                    ; child window transparency is required to accomplish the full effect, so $WS_EX_LAYERED above, and
                    ; I think the way this works is the transparent window color is based on the image you set here:
                    GUICtrlCreatePic("", 0, 0, $JB2_SplashScreen_Width-20, 17)
                    GUICtrlSetState(-1, $GUI_DISABLE)

                    Global $JB2_SplashScreen_GUI_Message = GUICtrlCreateLabel("", 0, 0, $JB2_SplashScreen_Width-20, 17)
                    GUICtrlSetFont(-1, 9, 800)
                    If StringInStr(@OSVersion, "WIN_XP") Then
                        GUICtrlSetColor(-1, 0x000066)
                        GUICtrlSetBKColor(-1, 0x000000)
                    Else
                        GUICtrlSetColor(-1, 0x000066)
                        GUICtrlSetBKColor(-1, 0xFFFFFF)
                    EndIf

                    GUISetState(@SW_SHOW)
                ElseIf $JB2_SplashScreen_Status = "Update" Then
                    GUICtrlSetData($JB2_SplashScreen_GUI_Message, $JB2_SplashScreen_Status_Message)
                ElseIf $JB2_SplashScreen_Status = "Off" Then
                    GUIDelete($JB2_SplashScreen_GUI_Child)

                    For $i = 255 To 0 Step -17
                        JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, $i)
                        Sleep(50)
                    Next

                    GUIDelete($JB2_SplashScreen_GUI)

                    _WinAPI_DeleteObject($JB2_SplashScreen_Image)
                EndIf
            EndFunc
        ; ==============================================================================================================================================
        #EndRegion ; JB2_SplashScreen
        ; ==============================================================================================================================================
        #Region ; JB2_SplashScreen_SetBitmap
        ; ==============================================================================================================================================
            Func JB2_SplashScreen_SetBitmap($JB2_SplashScreen_hGUI, $JB2_SplashScreen_hImage, $JB2_SplashScreen_iOpacity)
                Local $JB2_SplashScreen_hScrDC, $JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hBitmap, $JB2_SplashScreen_hOld, $JB2_SplashScreen_pSize, $JB2_SplashScreen_tSize, $JB2_SplashScreen_pSource, $JB2_SplashScreen_tSource, $JB2_SplashScreen_pBlend, $JB2_SplashScreen_tBlend

                $JB2_SplashScreen_hScrDC = _WinAPI_GetDC(0)
                $JB2_SplashScreen_hMemDC = _WinAPI_CreateCompatibleDC($JB2_SplashScreen_hScrDC)
                $JB2_SplashScreen_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($JB2_SplashScreen_hImage)
                $JB2_SplashScreen_hOld = _WinAPI_SelectObject($JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hBitmap)
                $JB2_SplashScreen_tSize = DllStructCreate($tagSIZE)
                $JB2_SplashScreen_pSize = DllStructGetPtr($JB2_SplashScreen_tSize)
                DllStructSetData($JB2_SplashScreen_tSize, "X", _GDIPlus_ImageGetWidth($JB2_SplashScreen_hImage))
                DllStructSetData($JB2_SplashScreen_tSize, "Y", _GDIPlus_ImageGetHeight($JB2_SplashScreen_hImage))
                $JB2_SplashScreen_tSource = DllStructCreate($tagPOINT)
                $JB2_SplashScreen_pSource = DllStructGetPtr($JB2_SplashScreen_tSource)
                $JB2_SplashScreen_tBlend = DllStructCreate($tagBLENDFUNCTION)
                $JB2_SplashScreen_pBlend = DllStructGetPtr($JB2_SplashScreen_tBlend)
                DllStructSetData($JB2_SplashScreen_tBlend, "Alpha", $JB2_SplashScreen_iOpacity)
                DllStructSetData($JB2_SplashScreen_tBlend, "Format", $JB2_SplashScreen_AC_SRC_ALPHA)
                _WinAPI_UpdateLayeredWindow($JB2_SplashScreen_hGUI, $JB2_SplashScreen_hScrDC, 0, $JB2_SplashScreen_pSize, $JB2_SplashScreen_hMemDC, $JB2_SplashScreen_pSource, 0, $JB2_SplashScreen_pBlend, $ULW_ALPHA)
                _WinAPI_ReleaseDC(0, $JB2_SplashScreen_hScrDC)
                _WinAPI_SelectObject($JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hOld)
                _WinAPI_DeleteObject($JB2_SplashScreen_hBitmap)
                _WinAPI_DeleteDC($JB2_SplashScreen_hMemDC)
            EndFunc
        ; ==============================================================================================================================================
        #EndRegion ; JB2_SplashScreen_SetBitmap
    ; ==================================================================================================================================================
    #EndRegion ; JB2_SplashScreen & Supporting Functions
    ; ==================================================================================================================================================
    #Region ; JB2_ChangeLog Function
    ; ==================================================================================================================================================
        Func JB2_ChangeLog($JB2_ChangeLog_GUIWindow = '', $JB2_ChangeLog_Script_Title = '', $JB2_ChangeLog_Script_Version = '')
            $JB2_ChangeLog_ListView_0Width = 0
            $JB2_ChangeLog_ListView_1Width = 0
            If $JB2_ChangeLog_Script_Title = '' Then
                $JB2_ChangeLog_GUI_Title = 'Change Log'
            Else
                $JB2_ChangeLog_GUI_Title = $JB2_ChangeLog_Script_Title & ' Change Log'
            EndIf
            $JB2_ChangeLog_GUI = GUICreate($JB2_ChangeLog_GUI_Title, 600, 550, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ChangeLog_GUIWindow)
            $JB2_ChangeLog_AppLogo = GUICtrlCreatePic("", 15, 15, 256, 256)
            GUICtrlSetBkColor($JB2_ChangeLog_AppLogo, $GUI_BKCOLOR_TRANSPARENT)
            _ResourceSetImageToCtrl($JB2_ChangeLog_AppLogo, "JB2_SplashScreen_Image")
            GUICtrlCreateLabel($JB2_ChangeLog_Script_Title, 296, 25, 300, 25, $SS_CENTER)
            GUICtrlSetFont (-1, 14, 800)
            If $JB2_ChangeLog_Script_Version <> "" Then
                GUICtrlCreateLabel("Version: " & $JB2_ChangeLog_Script_Version, 296, 50, 300, 20, $SS_CENTER)
                GUICtrlSetFont (-1, 10, 600)
            EndIf
            GUICtrlCreateLabel("Copyright © 2014-" & @YEAR & ", JBSquaredDesigns.com." & @CRLF & "All Rights Reserved.", 296, 75, 300, 30, $SS_CENTER)
            $JB2_ChangeLog_Logo = GUICtrlCreatePic("", 382, 105, 128, 128)
                GUICtrlSetBkColor($JB2_ChangeLog_Logo, $GUI_BKCOLOR_TRANSPARENT)
                _ResourceSetImageToCtrl($JB2_ChangeLog_Logo, "JB2_128PNG_Logo")

            GUICtrlCreateGroup("", 10, 276, 580, 265)
                GUICtrlCreateLabel("Change Log", 20, 288, 560, 30, $SS_CENTER)
                    GUICtrlSetFont (-1, 14, 800)
                $JB2_ChangeLog_ListView = GUICtrlCreateListView("Date|Changes", 20, 316, 560, 215, BitOr($LVS_NOSORTHEADER, $LVS_SORTASCENDING), BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE))
                GUICtrlSetBkColor($JB2_ChangeLog_ListView, $GUI_BKCOLOR_LV_ALTERNATE)
                For $li = 2 To $Script_ChangeLog[0][0]
                    If StringLen($Script_ChangeLog[$li][0]) > $JB2_ChangeLog_ListView_0Width Then $JB2_ChangeLog_ListView_0Width = StringLen($Script_ChangeLog[$li][0])
                    If StringLen($Script_ChangeLog[$li][1]) > $JB2_ChangeLog_ListView_1Width Then $JB2_ChangeLog_ListView_1Width = StringLen($Script_ChangeLog[$li][1])
                    Assign("$JB2_ChangeLog_ListView_Row" & Number($li - 1),GUICtrlCreateListViewItem($Script_ChangeLog[$li][0] & "|" & $Script_ChangeLog[$li][1], $JB2_ChangeLog_ListView))
                    GUICtrlSetBkColor(-1, 0xcccccc)
                Next
                _GUICtrlListView_SetColumnWidth($JB2_ChangeLog_ListView, 0, Number(($JB2_ChangeLog_ListView_0Width + 2) * 8)) ; 8px average width of characters at 8pt font.
                _GUICtrlListView_JustifyColumn($JB2_ChangeLog_ListView, 0, 2)
                _GUICtrlListView_SetColumnWidth($JB2_ChangeLog_ListView, 1, Number(($JB2_ChangeLog_ListView_1Width + 1) * 8)) ; 8px average width of characters at 8pt font.
                _GUICtrlListView_JustifyColumn($JB2_ChangeLog_ListView, 1)
            GUICtrlCreateGroup("", -99, -99, 1, 1)

            GUISetState()

            While 1
                $JB2_ChangeLog_iMsg = GUIGetMsg()
                Switch $JB2_ChangeLog_iMsg
                    Case $GUI_EVENT_CLOSE
                        GUIDelete($JB2_ChangeLog_GUI)
                        Return
                EndSwitch
            WEnd
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; JB2_ChangeLog Function
    ; ==================================================================================================================================================
    #Region ; JB2_ThankYou Function
    ; ==================================================================================================================================================
        Func JB2_ThankYou($JB2_ThankYou_SleepTimer, $JB2_ThankYou_GUIWindow = '', $JB2_ThankYou_Script_Title = '', $JB2_ThankYou_Script_Version = '')
            If $JB2_ThankYou_SleepTimer <> 0 Then
                $JB2_ThankYou_GUI = GUICreate("Thank You For Choosing:", 280, 280, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ThankYou_GUIWindow)
                $Logo = GUICtrlCreatePic("", 15, 15, 250, 250, $SS_SUNKEN)
                _ResourceSetImageToCtrl($Logo, "JB2_Logo")

                GUISetState()

                Sleep($JB2_ThankYou_SleepTimer)
            Else
                If $JB2_ThankYou_Script_Title = "" Then
                    $JB2_ThankYou_GUI_Title = "About"
                Else
                    $JB2_ThankYou_GUI_Title = "About " & $JB2_ThankYou_Script_Title
                EndIf
                $JB2_ThankYou_GUI = GUICreate($JB2_ThankYou_GUI_Title, 560, 280, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ThankYou_GUIWindow)
                $Logo = GUICtrlCreatePic("", 15, 15, 250, 250, $SS_SUNKEN)
                _ResourceSetImageToCtrl($Logo, "JB2_Logo")
                GUICtrlCreateLabel($JB2_ThankYou_Script_Title, 290, 25, 260, 25, $SS_CENTER)
                GUICtrlSetFont (-1, 14, 800)
                If $JB2_ThankYou_Script_Version <> "" Then
                    GUICtrlCreateLabel("Version: " & $JB2_ThankYou_Script_Version, 290, 50, 260, 20, $SS_CENTER)
                    GUICtrlSetFont (-1, 10, 600)
                EndIf
                GUICtrlCreateLabel("Copyright © 2014-" & @YEAR & ", JBSquaredDesigns.com." & @CRLF & "All Rights Reserved.", 290, 75, 260, 200, $SS_CENTER)

                GUISetState()

                While 1
                    $JB2_ThankYou_iMsg = GUIGetMsg()
                    Switch $JB2_ThankYou_iMsg
                        Case $GUI_EVENT_CLOSE
                            GUIDelete($JB2_ThankYou_GUI)
                            Return
                    EndSwitch
                WEnd
            EndIf
        EndFunc
    ; ==================================================================================================================================================
    #EndRegion ; JB2_ThankYou Function
; ======================================================================================================================================================
#EndRegion ; Necessary Supporting Functions
; ======================================================================================================================================================

 

TrayMenuIcons.au3

ShowMonitorInfo.au3

Edited by JoshuaBarnette

Share this post


Link to post
Share on other sites



After you get handle of clicked control use _WinAPI_GetClassName() to check if you clicked ListView, and then try with _GUICtrlListView_HitTest() to get index of clicked item.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • rcmaehl
      By rcmaehl
      A UDF with Extended Functions for Window Management

      DISCLAIMER:
      This UDF is still in the development phase. All code works and should be generally bug free, however function names and parameters are subject to change.
       
      Notes:
      Fixes _WindowGetClassList's barbaric returning of a @LF separated string instead of an array.
       
      Potential Uses:
      Automating applications that change their controls' handles/classes on each launch (e.g. half of Cisco's programs)
       
      Functions:
      _WinGetClassList
      _WinGetClassNNList
      _WindowGetHandleList
      _WindowGetHandleListFromPos
       
      Download: 
      WindowEx.zip  (v0.4)
       
      Changelog:
      10/04/2016 (v0.4): _WinGetClassNNList Fixed : Not Returning an Index when using $2D_ARRAY _WinGetClassNNList Fixed : Not Properly returning $aArray[x][1] on Classes with instances > 9 when using $2D_ARRAY 10/03/2016 (v0.3): _WinGetClassList Added : Exactly the same as WinGetClassList but returns a more civilized Array _WinGetClassNNList Added : Returns Classes and their instances in either a 1D or 2D array depending on Flags _WindowGetHandleList Renamed: _WinGetHandleList SCRIPT BREAKING! _WindowGetHandleListFromPos Renamed: _WinGetHandleListFromPos SCRIPT BREAKING! 10/01/2016 (v0.2): WindowsExConstants.au3 Added : Flags in _WindowGetHandleListFromPos _WindowGetHandleListFromPos Removed: ConsoleWrite left in during debug _WindowGetHandleListFromPos Added : Flag for if part of a Control is at $X, $Y return it as well. 10/01/2016 (v0.1): _WindowGetHandleList Added : Retrieves the handles of classes from a window. _WindowGetHandleListFromPos Added : Retrieves the handles of classes at a specific position from a window. Known and Reported Bugs:
      None reported To Do:
      To Be Decided. Opinions welcome! Upcoming Changes:
      To Be Decided.
    • Aphotic
      By Aphotic
      Just wanted to share my functions for managing a GUI with lots of controls and many screens.
      I personally feel that it is very efficient and keeps line count to a minimum.
      And if it's not, I'll learn a better solution!
      Note: There are some conditional veriables such as $changes and $cont that are modified by the main loop in this particular script; they are meant as an example, please don't try too hard to understand why they're used.
      *Usage*
      This allows you to re-state a handful of buttons in one line when doing slight GUI changes:
      ToggleCTRL($GUI_DISABLE, $dALO, $dAAF, $dRLA) (A few buttons on a certain screen)
      ToggleCTRL($GUI_DISABLE, $dSAV, $dCAN) (Save/Cancel buttons)
      AND
      A single line solution to switching a GUI "screen":
      GuiMod("MAIN", $GUI_HIDE)
      GuiMod("DETAILS", $GUI_SHOW)
      GuiMod("PLANS", $GUI_HIDE)
      Another way I've used this to my advantage is as follows:
      Say a GUI has 3 or 4 main screens, and 3 or 4 "form" screens.
      When switching to a form screen, save the main screen that it was on to a variable; then once the user is done with the form, either submitting or cancelling, you can call the variable to revert back to the main screen it was on.
      Func _GuiMod($i, $tog, $act = True) Switch $i Case "MAIN" If $tog = $GUI_SHOW And $changes Then $changes = False ControlClick($GUI, "", $LOGfg) Else EndIf If $tog = $GUI_SHOW Then WinMove($GUI, "", Default, Default, 535, 445) _ToggleCTRL($tog, $TAB, $LOGfl, $LOGfc, $LOGfi, $LOGfg, $LOGta, $LOGvd) _ToggleCTRL($tog, $LOGtp, $LOGse) Case "DETAILS" If $tog = $GUI_SHOW Then WinMove($GUI, "", Default, Default, 535, 475) Local $cont = True If $tog = $GUI_SHOW And $act Then If Not UpdateDetails() Then $cont = False _GuiMod("MAIN", $GUI_SHOW) EndIf EndIf If $cont Then _ToggleCTRL($tog, $dUID, $dICU, $dACC, $dCOF, $dNAM, $dCO2, $dIPW, $dEMA, $dEDI, $dLOG, $dMOD) _ToggleCTRL($tog, $dUPD, $dINP, $dAPL, $dALO, $dAAF, $dPLL, $dLOL, $dAFL, $dSAV, $dCAN, $dRPL) _ToggleCTRL($tog, $dRLA, $dACT, $dAC2, $dRET, $dDEL, $dADD, $dMQC) EndIf Case "ADD-INPUT" _ToggleCTRL($tog, $nCOMi, $nCO2i, $nNAMi, $nNAMb, $nEMAi, $nPREc, $nACCc, $nICUi, $nADDi, $nNOTi) _ToggleCTRL($tog, $nAPLb, $nALOb, $nAAFb, $nPLAl, $nLOCl, $nAFFl, $nRPLb, $nRLAb, $nADDb, $nCLEb) Case "PLANS" If $tog <> $GUI_SHOW Or Not $changing Then If $act Then _ToggleCTRL($tog, $dMOD, $dLOG, $dUPD, $dDEL) _ToggleCTRL($tog, $dINP, $dAPL, $dALO, $dAAF, $dPLL, $dLOL, $dAFL, $dSAV, $dCAN, $dRPL, $dRLA) EndIf Case "CHANGE" _ToggleCTRL($tog, $dITL, $dITC, $dAML, $dAMC, $dSCB, $dCCB, $dEAB) If $tog = $GUI_SHOW Then GUICtrlSetState($dRET, $GUI_DISABLE) Else GUICtrlSetState($dRET, $GUI_ENABLE) EndIf Case "NEW" If $tog = $GUI_SHOW Then WinMove($GUI, "", Default, Default, 465, 475) _ToggleCTRL($tog, $TAB, $nCOMl, $nCOMi, $nCO2l, $nCO2i, $nNAMl, $nNAMi, $nEMAl, $nEMAi, $nPREl, $nPREc) _ToggleCTRL($tog, $nACCl, $nACCc, $nPAEb, $nICUl, $nICUi, $nADDi, $nAPLb, $nALOb, $nAAFb, $nPLAl, $nLOCl) _ToggleCTRL($tog, $nAFFl, $nRPLb, $nNOTl, $nNOTi, $nADDb, $nCLEb, $nLAST) Case "ACCESS" If $tog = $GUI_SHOW Then WinMove($GUI, "", Default, Default, 465, 330) _ToggleCTRL($tog, $ACCd1, $ACCd2, $TYPla, $TYPli, $TYPad, $TYPde, $TYPmu, $TYPmd, $ACCla, $ACCli) _ToggleCTRL($tog, $ACCde, $ACCmu, $ACCmd, $ACCdl, $ACCdi, $ACCal, $ACCai, $ACCaa, $taRET) Case "TPi" _ToggleCTRL($tog, $tpOPEb, $tpCREr, $tpLINr, $tpCO2i, $tpEMAi, $tpEMAl, $tpCREb, $tpCOPb, $tpCOPi, $tpCTOi, $tpCGOb) _ToggleCTRL($tog, $tpUFLi, $tpUFLb, $tpICUi, $tpPLAi, $tpLINb, $tpDLIb, $tpUFMi, $tpSCAl, $tpCFAr, $tpCBAr) Case "TPC" If $tog = $GUI_SHOW Then _GuiMod("TPL", $GUI_HIDE) _GuiMod("TPH", $GUI_HIDE) _GuiMod("TPD", $GUI_HIDE) EndIf _ToggleCTRL($tog, $tpCO2l, $tpCO2i, $tpCOPl, $tpCOPi, $tpCREb, $tpCOPb, $tpSEPl, $tpCTOl, $tpCTOi, $tpCGOb, $tpLAST) _ToggleCTRL($tog, $tpIDNl, $tpIDNi, $tpIDNn, $tpSCAl, $tpEMAi, $tpEMAl, $tpCFAr, $tpCBAr) Case "TPL" If $tog = $GUI_SHOW Then _GuiMod("TPC", $GUI_HIDE) _GuiMod("TPH", $GUI_HIDE) _GuiMod("TPD", $GUI_HIDE) EndIf _ToggleCTRL($tog, $tpUFLl, $tpUFLi, $tpUFLb, $tpICUl, $tpICUi, $tpPLAl, $tpPLAi, $tpLINb, $tpDLIb, $tpUFMl, $tpUFMi, $tpIMAb, $tpIMRb) Case "TPH" If $tog = $GUI_SHOW Then _GuiMod("TPC", $GUI_HIDE) _GuiMod("TPL", $GUI_HIDE) _GuiMod("TPD", $GUI_HIDE) EndIf _ToggleCTRL($tog, $tpUFLl, $tpUFLi, $tpUFLb, $tpUFMl, $tpUFMi, $tpCOCl, $tpCOCi, $tpCOGb) Case "TPD" If $tog = $GUI_SHOW Then _GuiMod("TPC", $GUI_HIDE) _GuiMod("TPL", $GUI_HIDE) _GuiMod("TPH", $GUI_HIDE) EndIf _ToggleCTRL($tog, $tpDIDl, $tpDIDi, $tpDIDb) EndSwitch EndFunc Func _ToggleCTRL($tog, $c0 = 0, $c1 = 0, $c2 = 0, $c3 = 0, $c4 = 0, $c5 = 0, $c6 = 0, $c7 = 0, $c8 = 0, $c9 = 0, $c10 = 0, $c11 = 0, $c12 = 0) For $i = 0 To @NumParams GUICtrlSetState(Eval("c" & $i), $tog) Next EndFunc  
    • WoodGrain
      By WoodGrain
      Hi guys,
      Trying to map my mouse button 4 (I'm pretty sure it's 4 rather than 5, but I can experiment) to click the back button in a program (screenshot attached). In terms of positioning it sits in the middle of 3 screens if that makes a difference.
      I assume I can use something like (though I prob don't need the 1st two lines if using ControlClick?):
      WinActivate("ConnectWise v2016.4 (41139)", "Chrome Legacy Window") WinWaitActive("ConnectWise v2016.4 (41139)", "Chrome Legacy Window") ControlClick("ConnectWise v2016.4 (41139)", "Chrome Legacy Window", "[CLASS:Chrome_RenderWidgetHostHWND; INSTANCE:1]", "Left", 1, 0, 30) When I hover my mouse over the button I get the following information in Window Info
      >>>> Window <<<< Title: ConnectWise v2016.4 (41139) Class: TabBrowser_MainFrame Position: -8, -8 Size: 1696, 1026 Style: 0x17CF0000 ExStyle: 0x00040100 Handle: 0x0000000000010C56 >>>> Control <<<< Class: Chrome_RenderWidgetHostHWND Instance: 1 ClassnameNN: Chrome_RenderWidgetHostHWND1 Name: Advanced (Class): [CLASS:Chrome_RenderWidgetHostHWND; INSTANCE:1] ID: 315622768 Text: Chrome Legacy Window Position: 0, 30 Size: 1680, 957 ControlClick Coords: 81, 138 Style: 0x56300000 ExStyle: 0x00000020 Handle: 0x0000000000040AC6 >>>> Mouse <<<< Position: 81, 191 Cursor ID: 0 Color: 0x004E7F >>>> StatusBar <<<< >>>> ToolsBar <<<< >>>> Visible Text <<<< ConnectWise: My Calendar Chrome Legacy Window >>>> Hidden Text <<<< Chrome Legacy Window  

    • Sucre
      By Sucre
      I turned to Autoit from AHK just because it support WinForm Application so well. The problem often haunts me that all the application in my job is WinForm. And it indeed help my work so much. Great thanks in advance.
      However, I can't get the ToolTip text in the application of my company. Specifically,now I want to get the information about some data, however the information is all displayed in the tooltip on the scatter diagram which is made of those data.
      Is there any advice ? Relative topics I have searched can't get any information about the winform tooltip...
       
    • TheAutomator
      By TheAutomator
      Hi, i'm not a very educated guy when it comes to dll calls..
      can someone help me do this:
      DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", false) for only one control?