Leaderboard
Popular Content
Showing content with the highest reputation on 12/27/2014 in all areas
-
leuce, Or you could just use the Opt("SendKeyDelay" command to let AutoIt do the hard work for you. M231 point
-
Create empty array inside Scripting.Dictionary object
somedude12 reacted to Luigi for a topic
Try this... #include <Array.au3> ;~ Is there a way I can create an array inside a dictionary this way (without creating a variable first): Global Const $SD = "Scripting.Dictionary" Local $myDictionary = ObjCreate($SD) ;~ I agree, this way work! $myDictionary.Add("firstDictionary", ObjCreate($SD)) ;this is ok ;~ you are write, this way does not work... ;~ $myDictionary.Add("firstarray", []) ;this is wrong ;~ If you put an array in SD, try this... Local $arr[1] = ["item_1"] $myDictionary.Add("array", $arr) _ArrayDisplay(($myDictionary.Item("array"))) ; to display an array inside SD, put it between () Add_Obj_Array($myDictionary, "array", "item_2") _ArrayDisplay(($myDictionary.Item("array"))) ;_ArrayAdd( ($myDictionary.Item("array")), "teste_2") Func Add_Obj_Array(ByRef $oo, $array, $element) Local $arr = $oo.Item($array) _ArrayAdd($arr, $element) $oo.Item($array) = $arr EndFunc ;==>Add_Obj_Array obs: see this, I work with SD too, and for me, I can not see this code work without SD.1 point -
Control Viewer
argumentum reacted to UEZ for a topic
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 $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_BitmapCreateFromScan0($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 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 ; 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_GetWindowLong($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_GetWindowLong($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_GetWindowLong($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_GetWindowLong($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_BitmapCreateFromScan0($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 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 ColorChooser.au3 #Region Header #cs Title: Color Chooser Dialog UDF Library for AutoIt3 Filename: ColorChooser.au3 Description: Creates a "Color Chooser" dialog box to select a custom color Author: Yashied Version: 1.1 Requirements: AutoIt v3.3 +, Developed/Tested on WindowsXP Pro Service Pack 2 Uses: Constants.au3, EditConstants.au3, GUIConstantsEx.au3, GDIPlus.au3, Memory.au3, StaticConstants.au3, WinAPI.au3, WindowsConstants.au3 Notes: The library registers (permanently) the following window message: WM_COMMAND WM_NCRBUTTONDOWN WM_SETCURSOR WM_SYSCOMMAND Available functions: _ColorChooserDialog Example1: #Include <ColorChooser.au3> Opt('MustDeclareVars', 1) Global $hForm, $Msg, $Label, $Button, $Data, $Color = 0x50CA1B $hForm = GUICreate('MyGUI', 170, 200) $Label = GUICtrlCreateLabel('', 15, 15, 140, 140, $SS_SUNKEN) GUICtrlSetBkColor(-1, $Color) $Button = GUICtrlCreateButton('Select color...', 35, 166, 100, 23) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE ExitLoop Case $Button $Data = _ColorChooserDialog($Color, $hForm) If $Data > -1 Then GUICtrlSetBkColor($Label, $Data) $Color = $Data EndIf EndSwitch WEnd Example2 (required ColorPicker.au3): #Include <ColorChooser.au3> #Include <ColorPicker.au3> Opt('MustDeclareVars', 1) Global $hForm, $Msg, $Label, $Picker $hForm = GUICreate('MyGUI', 170, 200) $Label = GUICtrlCreateLabel('', 15, 15, 140, 140, $SS_SUNKEN) GUICtrlSetBkColor(-1, 0x50CA1B) $Picker = _GUIColorPicker_Create('', 55, 166, 60, 23, 0x50CA1B, BitOR($CP_FLAG_CHOOSERBUTTON, $CP_FLAG_MAGNIFICATION, $CP_FLAG_ARROWSTYLE), 0, -1, -1, 0, 'Simple Text', 'Custom...', '_ColorChooserDialog') GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE ExitLoop Case $Picker GUICtrlSetBkColor($Label, _GUIColorPicker_GetColor($Picker)) EndSwitch WEnd #ce #Include-once #Include <Constants.au3> #Include <EditConstants.au3> #Include <GUIConstantsEx.au3> #Include <GDIPlus.au3> #Include <Memory.au3> #Include <StaticConstants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> #EndRegion Header #Region Global Variables and Constants Global Const $CC_FLAG_SOLIDCOLOR = 0x01 Global Const $CC_FLAG_CAPTURECOLOR = 0x02 Global Const $CC_FLAG_USERCOLOR = 0x40 Global Const $CC_FLAG_DEFAULT = BitOR($CC_FLAG_SOLIDCOLOR, $CC_FLAG_CAPTURECOLOR) #EndRegion Global Variables and Constants #Region Local Variables and Constants Global Const $CC_REG_COMMONDATA = 'HKCU\SOFTWARE\Y''s\Common Data\Color Chooser\1.1\Palette' Global Const $CC_WM_COMMAND = 0x0111 Global Const $CC_WM_NCRBUTTONDOWN = 0x00A4 Global Const $CC_WM_SETCURSOR = 0x0020 Global Const $CC_WM_SYSCOMMAND = 0x0112 Dim $ccData[29] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, Default, Default, 0, 0] #cs DO NOT USE THIS ARRAY IN THE SCRIPT, INTERNAL USE ONLY! $ccData[0 ] - Handle to the "Color Chooser" window [1 ] - The control ID of the main palette image control [2 ] - The control ID of the arrow image control (left) [3 ] - The control ID of the arrow image control (right) [4 ] - The control ID of the HSB palette image control [5 ] - The control ID of the solid color preview image control (left) [6 ] - The control ID of the solid color preview image control (right) [7 ] - The control ID of the picker image control [8 ] - Handle to the left/right arrow image (HImage) [9 ] - Handle to the cursor (uses ColorPicker.au3) [10] - The control ID of the "R" (RGB) input [11] - The control ID of the "G" (RGB) input [12] - The control ID of the "B" (RGB) input [13] - The control ID of the "H" (HSL) input [14] - The control ID of the "S" (HSL) input [15] - The control ID of the "L" (HSL) input [16] - The control ID of the "H" (HSB) input [17] - The control ID of the "S" (HSB) input [18] - The control ID of the "B" (HSB) input [19] - The control ID of the "#" (HEX) input [20] - Passed/Initialization update value [21] - Capture color, in RGB [22] - Update input control flag [23] - The control ID of the "OK" button control [24] - The control ID of the Dummy control (input) [25] - X-offset relative to the parent window (Optional) [26] - Y-offset relative to the parent window (Optional) [27] - The control ID of the Dummy control (dounle click item) [28] - Reserved #ce Dim $ccPalette[21][3] = [[0, 1, 0]] For $i = 1 To UBound($ccPalette) - 1 $ccPalette[$i][0] = -1 Next #cs DO NOT USE THIS ARRAY IN THE SCRIPT, INTERNAL USE ONLY! $ccPalette[0][0] - Current selected item [0][1] - Tooltip control flag (Optional) [0][2] - Don't used $ccPalette[i][0] - User color, in RGB [i][1] - The control ID of the "User Color" image control [i][2] - Reserved #ce Global $__CC_RGB[3], $__CC_HSL[3], $__CC_HSB[3], $ghGDIPDll Global $__CC_WM0111 = 0 Global $__CC_WM0020 = 0 #EndRegion Local Variables and Constants #Region Initialization ; IMPORTANT! If you register the following window messages in your code, you should call handlers from this library until ; you return from your handlers, otherwise the Clor Chooser dialog box will not work properly. For example: ; ; Func MY_WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) ; Local $Result = CC_WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) ; If Not $Result Then ; Return 0 ; EndIf ; ... ; Return $GUI_RUNDEFMSG ; EndFunc ;==>MY_WM_SETCURSOR GUIRegisterMsg($CC_WM_COMMAND, 'CC_WM_COMMAND') GUIRegisterMsg($CC_WM_NCRBUTTONDOWN, 'CC_WM_NCRBUTTONDOWN') GUIRegisterMsg($CC_WM_SETCURSOR, 'CC_WM_SETCURSOR') GUIRegisterMsg($CC_WM_SYSCOMMAND, 'CC_WM_SYSCOMMAND') #EndRegion Initialization #Region Public Functions ; #FUNCTION# ==================================================================================================================== ; Name...........: _ColorChooserDialog ; Description....: Creates a "Color Chooser" dialog box that enables the user to select a color. ; Syntax.........: _ColorChooserDialog ( [$iColor [, $hParent [, $iRefType [, $iReturnType [, $iFlags [, $sTitle]]]]]] ) ; Parameters.....: $iColor - Default selected color. Type of this parameter depends on the $iRefType value and ; should be one of the following types. ; ; RGB (Red, Green, Blue) ; Value of RGB color, like 0xRRGGBB. ; ; HSL (Hue, Saturation, Lightness) ; 3-item array of values for the Hue, Saturation, and Lightness, respectively. ; ; [0] - H (0-240) ; [1] - S (0-240) ; [2] - L (0-240) ; ; HSB (Hue, Saturation, Brightness) ; 3-item array of values for the Hue, Saturation, and Brightness, respectively. ; ; [0] - H (0-360)° ; [1] - S (0-100)% ; [2] - B (0-100)% ; ; $hParent - Handle to the window that owns the dialog box. ; $iRefType - Type of $iColor passed in, valid values: ; |0 - RGB ; |1 - HSL ; |2 - HSB ; $iReturnType - Determines return type, valid values: ; |0 - RGB ; |1 - HSL ; |2 - HSB ; $iFlags - The flags that defines a style of the "Color Chooser" dialog box. This parameter can be ; a combination of the following values. ; ; $CC_FLAG_SOLIDCOLOR ; $CC_FLAG_CAPTURECOLOR ; $CC_FLAG_USERCOLOR ; $CC_FLAG_DEFAULT ; ; (See constants section in this library) ; ; If this parameter contains $CC_FLAG_USERCOLOR flag, you can save up to 20 color values (in RGB). ; These values are in the following registry hive and will be available for other programs that ; use _ColorChooserDialog() function. ; ; HKEY_CURRENT_USER\SOFTWARE\Y's Common Data\Color Chooser\Palette ; ; $sTitle - Title of the "Color Chooser" dialog box. ; Return values..: Success - Selected color depending on value of the $iReturnType parameter (see above). ; Failure - (-1) ; Author.........: Yashied ; Modified.......: ; Remarks........: This function is fully compatible with the ColorPicker.au3 UDF library (v1.5) and can be used as a custom ; function for a "Color Chooser" dialog box (see examples). Since both these libraries use the same window messages, ; when using these messages in your code, you should refer to only one message from any library (see above). ; Related........: ; Link...........: ; Example........: Yes ; =============================================================================================================================== Func _ColorChooserDialog($iColor = 0, $hParent = 0, $iRefType = 0, $iReturnType = 0, $iFlags = -1, $sTitle = 'Color') _GDIPlus_Startup() $ghGDIPDll = $__g_hGDIPDll If $iFlags < 0 Then $iFlags = $CC_FLAG_DEFAULT EndIf $ccData[8 ] = _Image_Arrow() Local $hPopup = 0, $Cursor, $Index, $Key, $Msg, $Pos, $Xp, $Yp, $Pressed = False, $Return = False Local $H1 = 69 * (BitAND($iFlags, $CC_FLAG_SOLIDCOLOR) = $CC_FLAG_SOLIDCOLOR) LocaL $H2 = 56 * (BitAND($iFlags, $CC_FLAG_USERCOLOR) = $CC_FLAG_USERCOLOR) Local $GUIOnEventMode = Opt('GUIOnEventMode', 0) Local $GUICloseOnESC = Opt('GUICloseOnESC', 1) If _WinAPI_GetSystemMetrics($SM_SWAPBUTTON) Then $Key = 0x02 Else $Key = 0x01 EndIf GUISetState(@SW_DISABLE, $hParent) $ccData[0 ] = GUICreate($sTitle, 315, 396 + $H1 + $H2, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_DLGMODALFRAME, $hParent) CC_SetChildPos($ccData[0], $hParent, $ccData[25], $ccData[26]) GUISetFont(9, 400, 0, 'Tahoma', $ccData[0]) $ccData[23] = GUICtrlCreateButton('OK', 115, 365 + $H1 + $H2, 85, 23) GUICtrlSetFont(-1, 8.5, 400, 0, 'MS Shell Dlg') GUICtrlSetState(-1, $GUI_DEFBUTTON) $ccData[1 ] = GUICtrlCreatePic('', 20 , 20 , 243, 243, BitOR($GUI_SS_DEFAULT_PIC, $SS_SUNKEN)) If $ccData[9] Then GUICtrlSetState(-1, $GUI_DISABLE) EndIf $ccData[2 ] = GUICtrlCreatePic('', 264, 17 , 8 , 249) $ccData[3 ] = GUICtrlCreatePic('', 296, 17 , 8 , 249) $ccData[4 ] = GUICtrlCreatePic('', 273, 20 , 22 , 243, BitOR($GUI_SS_DEFAULT_PIC, $SS_SUNKEN)) If BitAND($iFlags, $CC_FLAG_SOLIDCOLOR) Then GUICtrlCreatePic('', 20, 273, 243, 59, BitOR($GUI_SS_DEFAULT_PIC, $SS_SUNKEN)) GUICtrlSetState(-1, $GUI_DISABLE) $ccData[5] = GUICtrlCreatePic('', 21 , 274, 123, 57) $ccData[6] = GUICtrlCreatePic('', 144, 274, 118, 57) Else $ccData[5] = 0 $ccData[6] = 0 EndIf If BitAND($iFlags, $CC_FLAG_CAPTURECOLOR) Then $ccData[7] = GUICtrlCreatePic('', 275, 273, 19 , 19) Else $ccData[7] = 0 EndIf $ccPalette[0][0] = 0 If BitAND($iFlags, $CC_FLAG_USERCOLOR) Then CC_LoadUserColor() For $i = 1 To 2 For $j = 1 To 10 $Index = 10 * ($i - 1) + $j $ccPalette[$Index][1] = GUICtrlCreatePic('', 18 + 25 * ($j - 1), 271 + 28 * ($i - 1) + $H1, 22, 22) CC_SetUserColor($Index) Next Next Else For $i = 1 To 10 $ccPalette[$i][1] = 0 Next EndIf GUICtrlCreateLabel('R:', 19 , 279 + $H1 + $H2, 13, 14) $ccData[10] = GUICtrlCreateInput('', 33 , 277 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('G:', 19 , 304 + $H1 + $H2, 13, 14) $ccData[11] = GUICtrlCreateInput('', 33 , 302 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('B:', 19 , 329 + $H1 + $H2, 13, 14) $ccData[12] = GUICtrlCreateInput('', 33 , 327 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('H:', 86 , 279 + $H1 + $H2, 13, 14) $ccData[13] = GUICtrlCreateInput('', 100, 277 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('S:', 86 , 304 + $H1 + $H2, 13, 14) $ccData[14] = GUICtrlCreateInput('', 100, 302 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('L:', 86 , 329 + $H1 + $H2, 13, 14) $ccData[15] = GUICtrlCreateInput('', 100, 327 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('H:', 153, 279 + $H1 + $H2, 13, 14) GUICtrlCreateLabel('°' , 202, 279 + $H1 + $H2, 14, 14) $ccData[16] = GUICtrlCreateInput('', 167, 277 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('S:', 153, 304 + $H1 + $H2, 13, 14) GUICtrlCreateLabel('%' , 202, 304 + $H1 + $H2, 14, 14) $ccData[17] = GUICtrlCreateInput('', 167, 302 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('B:', 153, 329 + $H1 + $H2, 13, 14) GUICtrlCreateLabel('%' , 202, 329 + $H1 + $H2, 14, 14) $ccData[18] = GUICtrlCreateInput('', 167, 327 + $H1 + $H2, 34, 19) GUICtrlCreateLabel('#' , 223, 279 + $H1 + $H2, 10, 14) $ccData[19] = GUICtrlCreateInput('', 234, 277 + $H1 + $H2, 61, 19) GUICtrlSetLimit(-1, 6) $ccData[24] = GUICtrlCreateDummy() $ccData[27] = GUICtrlCreateDummy() For $i = 10 To 18 GUICtrlSetLimit($ccData[$i], 3) Next CC_SetPalette() CC_SetPicker() CC_ValidateColor($iColor, $iRefType) CC_Update($ccData[20]) CC_SetColor($__CC_RGB) GUISetState(@SW_SHOW, $ccData[0]) $ccData[22] = 0 While 1 $Msg = 0 $Cursor = GUIGetCursorInfo($ccData[0]) If (Not @error) And (BitAND(WinGetState($ccData[0]), 8)) Then If $Cursor[2] Then If $Cursor[4] = $ccData[1] Then If Not $Pressed Then $Msg = $GUI_EVENT_PRIMARYDOWN EndIf Else $Pressed = 1 EndIf Else $Pressed = 0 EndIf EndIf If Not $Msg Then $Msg = GUIGetMsg(1) If $Msg[1] = $ccData[0] Then $Msg = $Msg[0] Else ContinueLoop EndIf If $Msg = $GUI_EVENT_PRIMARYDOWN Then ContinueLoop EndIf EndIf Switch $Msg Case $GUI_EVENT_PRIMARYDOWN GUICtrlSetState($ccData[23], $GUI_FOCUS) $Xp = Default Opt('GUIOnEventMode', 1) While CC_IsPressed($Key) $Pos = CC_GetCursor($ccData[1]) If Not @error Then If ($Pos[0] <> $Xp) Or ($Pos[1] <> $Yp) Then For $i = 1 To 2 $__CC_HSB[$i] = Round($Pos[$i - 1] / 240 * 100) If $__CC_HSB[$i] > 100 Then $__CC_HSB[$i] = 100 EndIf If $__CC_HSB[$i] < 0 Then $__CC_HSB[$i] = 0 EndIf Next $__CC_HSB[2] = 100 - $__CC_HSB[2] CC_Update(3, 0) $Xp = $Pos[0] $Yp = $Pos[1] EndIf EndIf WEnd Opt('GUIOnEventMode', 0) Case 0 ContinueLoop Case $GUI_EVENT_CLOSE ExitLoop Case $ccData[2], $ccData[3], $ccData[4] GUICtrlSetState($ccData[23], $GUI_FOCUS) $Xp = Default Opt('GUIOnEventMode', 1) While CC_IsPressed($Key) $Pos = CC_GetCursor($ccData[2]) If Not @error Then If $Pos[1] <> $Yp Then $__CC_HSB[0] = Round((240 - $Pos[1] + 4) / 240 * 359) If $__CC_HSB[0] > 359 Then $__CC_HSB[0] = 359 EndIf If $__CC_HSB[0] < 0 Then $__CC_HSB[0] = 0 EndIf CC_Update(3, 1) $Xp = $Pos[0] $Yp = $Pos[1] EndIf EndIf WEnd Opt('GUIOnEventMode', 0) Case $ccData[7] GUICtrlSetState($ccData[23], $GUI_FOCUS) If Not $ccData[5] Then $hPopup = GUICreate('', 95, 95, -1, -1, $WS_POPUP, $WS_EX_TOPMOST, $ccData[0]) GUISetBkColor(0x000000) $ccData[5] = GUICtrlCreatePic('', 1, 1, 93, 93, $SS_WHITERECT) GUICtrlSetState(-1, $GUI_DISABLE) EndIf $Xp = Default Opt('GUIOnEventMode', 1) While CC_IsPressed($Key) $Pos = CC_GetCursor() If Not @error Then If ($Pos[0] <> $Xp) Or ($Pos[1] <> $Yp) Then If $hPopup Then WinMove($hPopup, '', $Pos[0] + 16, $Pos[1] + 16) If Not BitAND(WinGetState($hPopup), 2) Then GUISetState(@SW_SHOWNOACTIVATE, $hPopup) EndIf CC_SetBitmap($ccData[5], CC_Capture($Pos[0] - 15, $Pos[1] - 15, 31, 31, 93, 93)) Else CC_SetBitmap($ccData[5], CC_Capture($Pos[0] - 20, $Pos[1] - 9, 41, 19, 123, 57)) EndIf $Xp = $Pos[0] $Yp = $Pos[1] EndIf EndIf WEnd Opt('GUIOnEventMode', 0) If $hPopup Then GUIDelete($hPopup) $ccData[5] = 0 EndIf $__CC_RGB = CC_SplitColor($ccData[21]) CC_Update(1) Case $ccData[23] $Return = 1 ExitLoop Case $ccData[24] $Index = GUICtrlRead($ccData[24]) If $Index Then CC_Update($Index, 1, 1) EndIf Case $ccData[27] $Index = GUICtrlRead($ccData[27]) Switch $Index Case 0 Case $ccData[1], $ccData[5] If $ccPalette[0][0] Then $ccPalette[$ccPalette[0][0]][0] = CC_RGB($__CC_RGB) CC_SetUserColor($ccPalette[0][0], 1) EndIf Case $ccData[6] CC_ValidateColor($iColor, $iRefType) CC_Update($ccData[20]) Case Else For $i = 1 To 20 If $Index = $ccPalette[$i][1] Then If ($ccPalette[$i][0] > -1) And ($ccPalette[$i][0] <> CC_RGB($__CC_RGB)) Then $__CC_RGB = CC_SplitColor($ccPalette[$i][0]) CC_Update(1) EndIf ExitLoop EndIf Next EndSwitch Case Else For $i = 1 To 20 If $Msg = $ccPalette[$i][1] Then If $i <> $ccPalette[0][0] Then CC_SetUserColor($ccPalette[0][0]) CC_SetUserColor($i, 1) $ccPalette[0][0] = $i EndIf ExitLoop EndIf Next EndSwitch WEnd $ccData[22] = 1 GUISetState(@SW_ENABLE, $hParent) GUIDelete($ccData[0]) $ccData[0 ] = 0 Opt('GUIOnEventMode', $GUIOnEventMode) Opt('GUICloseOnESC', $GUICloseOnESC) _GDIPlus_ImageDispose($ccData[8]) _GDIPlus_Shutdown() If BitAND($iFlags, $CC_FLAG_USERCOLOR) Then CC_SaveUserColor() EndIf If $Return Then Switch $iReturnType Case 1 Return $__CC_HSL Case 2 Return $__CC_HSB Case Else Return CC_RGB($__CC_RGB) EndSwitch Else Return -1 EndIf EndFunc ;==>_ColorChooserDialog #EndRegion Public Functions #Region Internal Functions Func CC_Beep() DllCall('user32.dll', 'int', 'MessageBeep', 'int', 0) EndFunc ;==>CC_Beep Func CC_Capture($iX, $iY, $iSrcWidth, $iSrcHeight, $iDstWidth, $iDstHeight) Local $tRECT, $hWnd, $hDC, $hSrcDC, $hDstDC, $hGraphics, $hBrush, $hImage, $hBitmap, $hScreen, $hPen = 0 Local $Xc = Floor($iDstWidth / 2), $Yc = Floor($iDstHeight / 2) Local $Pos = CC_GetClientPos($ccData[0]) $hWnd = _WinAPI_GetDesktopWindow() $hDC = _WinAPI_GetDC($hWnd) $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) $tRECT = DllStructCreate($tagRECT) DllStructSetData($tRECT, 1, $Pos[0] - $iX + 21 ) DllStructSetData($tRECT, 2, $Pos[1] - $iY + 274) DllStructSetData($tRECT, 3, $Pos[0] - $iX + 21 + 123) DllStructSetData($tRECT, 4, $Pos[1] - $iY + 274 + 57 ) $hBrush = _WinAPI_CreateSolidBrush(0) _WinAPI_FillRect($hSrcDC, DllStructGetPtr($tRECT), $hBrush) _WinAPI_DeleteObject($hBrush) $hDstDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iDstWidth, $iDstHeight) _WinAPI_SelectObject($hDstDC, $hBitmap) DllCall('gdi32.dll', 'int', 'SetStretchBltMode', 'hwnd', $hDstDC, 'int', 3) DllCall('gdi32.dll', 'int', 'StretchBlt', 'hwnd', $hDstDC, 'int', 0, 'int', 0, 'int', $iDstWidth, 'int', $iDstHeight, 'hwnd', $hSrcDC, 'int', 0, 'int', 0, 'int', $iSrcWidth, 'int', $iSrcHeight, 'dword', $SRCCOPY) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_DeleteDC($hDstDC) _WinAPI_DeleteDC($hSrcDC) _WinAPI_DeleteObject($hScreen) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $ccData[21] = BitAND(__GDIPlus_BitmapGetPixel($hImage, $Xc, $Yc), 0x00FFFFFF) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) 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 CC_IsDark(__GDIPlus_BitmapGetPixel($hImage, $x, $y))) Then $hPen = _GDIPlus_PenCreate() ExitLoop 2 EndIf Next Next If Not $hPen Then $hPen = _GDIPlus_PenCreate(0xFFFFFFFF) EndIf _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) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) Return $hBitmap EndFunc ;==>CC_Capture Func CC_GetBValue($iRGB) Return BitAND($iRGB, 0x0000FF) EndFunc ;==>CC_GetBValue Func CC_GetClientPos($hWnd) Local $Size = WinGetClientSize($hWnd) If Not IsArray($Size) Then Return SetError(1, 0, 0) EndIf Local $tPOINT = DllStructCreate($tagPOINT) For $i = 1 To 2 DllStructSetData($tPOINT, $i, 0) Next _WinAPI_ClientToScreen($hWnd, $tPOINT) If @error Then Return SetError(1, 0, 0) EndIf Local $Pos[4] For $i = 0 To 1 $Pos[$i] = DllStructGetData($tPOINT, $i + 1) Next For $i = 2 To 3 $Pos[$i] = $Size[$i - 2] Next Return $Pos EndFunc ;==>CC_GetClientPos Func CC_GetCursor($hWnd = 0) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) EndIf Local $tPOINT = _WinAPI_GetMousePos($hWnd, $hWnd) If @error Then Return SetError(1, 0, 0) EndIf Local $Pos[2] For $i = 0 To 1 $Pos[$i] = DllStructGetData($tPOINT, $i + 1) Next Return $Pos EndFunc ;==>CC_GetCursor Func CC_GetGValue($iRGB) Return BitShift(BitAND($iRGB, 0x00FF00), 8) EndFunc ;==>CC_GetGValue Func CC_GetRValue($iRGB) Return BitShift(BitAND($iRGB, 0xFF0000), 16) EndFunc ;==>CC_GetRValue Func CC_IsDark($iRGB) If CC_GetRValue($iRGB) + CC_GetGValue($iRGB) + CC_GetBValue($iRGB) < 3 * 255 / 2 Then Return 1 Else Return 0 EndIf EndFunc ;==>CC_IsDark Func CC_IsPressed($iKey) Local $Ret = DllCall('user32.dll', 'short', 'GetAsyncKeyState', 'int', $iKey) If @error Then Return SetError(1, 0, 0) EndIf Return Number(BitAND($Ret[0], 0x8000) <> 0) EndFunc ;==>CC_IsPressed Func CC_LoadImageFromMem(ByRef $bImage) Local $hImage, $hStream, $bData, $hData, $pData, $tData, $Lenght $bData = Binary($bImage) $Lenght = BinaryLen($bData) $hData = _MemGlobalAlloc($Lenght, 2) $pData = _MemGlobalLock($hData) $tData = DllStructCreate('byte[' & $Lenght & ']', $pData) DllStructSetData($tData, 1, $bData) _MemGlobalUnlock($hData) $hStream = DllCall('ole32.dll', 'int', 'CreateStreamOnHGlobal', 'ptr', $hData, 'int', 1, 'ptr*', 0) $hImage = __GDIPlus_BitmapCreateFromStream($hStream[3]) ; If Not $hImage Then ; _MemGlobalFree($hData) ; EndIf Return $hImage EndFunc ;==>CC_LoadImageFromMem Func CC_LoadUserColor() For $i = 1 To UBound($ccPalette) - 1 $ccPalette[$i][0] = RegRead($CC_REG_COMMONDATA, StringFormat('#%02d', $i)) If (@error) Or (BitAND(0xFF000000, $ccPalette[$i][0])) Then $ccPalette[$i][0] = -1 EndIf Next EndFunc ;==>CC_LoadUserColor Func CC_RGB($aRGB) Return BitOR(BitShift($aRGB[0], -16), BitShift($aRGB[1], -8), $aRGB[2]) EndFunc ;==>CC_RGB Func CC_SaveUserColor() For $i = 1 To UBound($ccPalette) - 1 RegWrite($CC_REG_COMMONDATA, StringFormat('#%02d', $i), 'REG_DWORD', $ccPalette[$i][0]) Next EndFunc ;==>CC_SaveUserColor Func CC_SetBitmap($hWnd, $hBitmap) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) If $hWnd = 0 Then Return EndIf EndIf Local $hObj $hObj = _SendMessage($hWnd, 0x0172, 0, $hBitmap) If $hObj Then _WinAPI_DeleteObject($hObj) EndIf _WinAPI_InvalidateRect($hWnd) $hObj = _SendMessage($hWnd, 0x0173) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf EndFunc ;==>CC_SetBitmap Func CC_SetChildPos($hChild, $hParent, $iX = Default, $iY = Default) Local $Pos1, $Pos2 = CC_GetClientPos($hParent) Local $tRECT, $Ret, $X, $Y, $Height $Pos1 = WinGetPos($hChild) If (@error) Or (Not IsArray($Pos2)) Then Return SetError(1, 0, 0) EndIf If $iX = Default Then $X = $Pos2[0] + ($Pos2[2] - $Pos1[2]) / 2 Else $X = $Pos2[0] + $iX EndIf If $iY = Default Then $Y = $Pos2[1] + ($Pos2[3] - $Pos1[3]) / 2 Else $Y = $Pos2[1] + $iY EndIf $tRECT = DllStructCreate($tagRECT) $Ret = DllCall('user32.dll', 'int', 'SystemParametersInfo', 'int', 48, 'int', 0, 'ptr', DllStructGetPtr($tRECT), 'int', 0) If (@error) Or ($Ret[0] = 0) Then $Height = @DesktopHeight Else $Height = DllStructGetData($tRECT, 4) EndIf If $X < 0 Then $X = 0 EndIf If $X > @DesktopWidth - $Pos1[2] Then $X = @DesktopWidth - $Pos1[2] EndIf If $Y < 0 Then $Y = 0 EndIf If $Y > $Height - $Pos1[3] Then $Y = $Height - $Pos1[3] EndIf If Not WinMove($hChild, '', $X, $Y) Then Return SetError(1, 0, 0) EndIf Return 1 EndFunc ;==>CC_SetChildPos Func CC_SetColor($RGB) Local $hGraphics, $hBrush, $hImage, $hBitmap $hBitmap = _WinAPI_CreateBitmap(118, 57, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, CC_RGB($RGB))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 118, 57, $hBrush) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[6], $hBitmap) EndFunc ;==>CC_SetColor Func CC_SetPalette() Local $hGraphics, $hPen, $hImage, $hBitmap Local $ARGB, $RGB, $HSB[3] $hBitmap = _WinAPI_CreateBitmap(20, 241, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $HSB[1] = 100 $HSB[2] = 100 For $i = 0 To 240 $HSB[0] = (240 - $i) * 359 / 240 $RGB = _HSB2RGB($HSB) $hPen = _GDIPlus_PenCreate(BitOR(0xFF000000, CC_RGB($RGB)), 1) _GDIPlus_GraphicsDrawLine($hGraphics, 0, $i, 19, $i, $hPen) _GDIPlus_PenDispose($hPen) Next _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[4], $hBitmap) EndFunc ;==>CC_SetPalette Func CC_SetPicker() Local $hGraphics, $hBrush, $hPicker, $hImage, $hBitmap $hBitmap = _WinAPI_CreateBitmap(19, 19, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, CC_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 19, 19, $hBrush) _GDIPlus_BrushDispose($hBrush) $hPicker = _Image_Picker() _GDIPlus_GraphicsDrawImageRect($hGraphics, $hPicker, 0, 0, 19, 19) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hPicker) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[7], $hBitmap) EndFunc ;==>CC_SetPicker Func CC_SetUserColor($iIndex, $fSelect = 0) Local $hGraphics, $hBrush, $hPen, $hImage, $hBitmap $hBitmap = _WinAPI_CreateBitmap(22, 22, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, CC_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 22, 22, $hBrush) $hPen = _GDIPlus_PenCreate(0xFFA7A7A7) _GDIPlus_GraphicsDrawRect($hGraphics, 2, 2, 17, 17, $hPen) If $fSelect Then _GDIPlus_PenSetColor($hPen, 0xFF606060) _GDIPlus_GraphicsDrawRect($hGraphics, 0, 0, 21, 21, $hPen) EndIf If $ccPalette[$iIndex][0] > -1 Then _GDIPlus_BrushSetSolidColor($hBrush, BitOR(0xFF000000, $ccPalette[$iIndex][0])) _GDIPlus_GraphicsFillRect($hGraphics, 3, 3, 16, 16, $hBrush) If $ccPalette[0][1] Then GUICtrlSetTip($ccPalette[$iIndex][1], Hex($ccPalette[$iIndex][0], 6)) EndIf Else If $ccPalette[0][1] Then GUICtrlSetTip($ccPalette[$iIndex][1], 'None') EndIf EndIf _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccPalette[$iIndex][1], $hBitmap) EndFunc ;==>CC_SetUserColor Func CC_SplitColor($iColor) Local $RGB[3] $RGB[0] = CC_GetRValue($iColor) $RGB[1] = CC_GetGValue($iColor) $RGB[2] = CC_GetBValue($iColor) Return $RGB EndFunc ;==>CC_SplitColor Func CC_SwitchColor($iColor) Return BitOR(BitAND($iColor, 0x00FF00), BitShift(BitAND($iColor, 0x0000FF), -16), BitShift(BitAND($iColor, 0xFF0000), 16)) EndFunc ;==>CC_SwitchColor Func CC_Update($iIndex, $fPalette = 1, $fSkip = 0) Local $hGraphics, $hBrush, $hPen, $hImage, $hBitmap Local $X, $Y, $ARGB, $RGB, $HSB Switch $iIndex Case 4 ; HEX ContinueCase Case 1 ; RGB $__CC_HSL = _RGB2HSL($__CC_RGB) $__CC_HSB = _RGB2HSB($__CC_RGB) Case 2 ; HSL $__CC_RGB = _HSL2RGB($__CC_HSL) $__CC_HSB = _RGB2HSB($__CC_RGB) Case 3 ; HSB $__CC_RGB = _HSB2RGB($__CC_HSB) $__CC_HSL = _RGB2HSL($__CC_RGB) EndSwitch If $fPalette Then $hBitmap = _WinAPI_CreateBitmap(8, 249, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, CC_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 8, 249, $hBrush) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDrawImageRect($hGraphics, $ccData[8], 0, Round((359 - $__CC_HSB[0]) / 359 * 240), 8, 9) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) CC_SetBitmap($ccData[2], $hBitmap) __GDIPlus_ImageRotateFlip($hImage, 4) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[3], $hBitmap) EndIf $HSB = $__CC_HSB $HSB[1] = 100 $HSB[2] = 100 $RGB = _HSB2RGB($HSB) $hBitmap = _WinAPI_CreateBitmap(241, 241, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = __GDIPlus_LineBrushCreate(0, 0, 241, 0, 0xFFFFFFFF, BitOR(0xFF000000, CC_RGB($RGB))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 241, 241, $hBrush) _GDIPlus_BrushDispose($hBrush) $hBrush = __GDIPlus_LineBrushCreate(0, 0, 0, 241, 0, 0xFF000000) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 241, 241, $hBrush) _GDIPlus_BrushDispose($hBrush) $X = Round($__CC_HSB[1] / 100 * 241) $Y = Round((1 - $__CC_HSB[2] / 100) * 241) If CC_IsDark(CC_RGB($__CC_RGB)) Then $ARGB = 0xFFFFFFFF Else $ARGB = 0xFF000000 EndIf $hPen = _GDIPlus_PenCreate($ARGB, 2) _GDIPlus_GraphicsDrawLine($hGraphics, $X - 7, $Y, $X - 3, $Y, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $X + 3, $Y, $X + 7, $Y, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $X, $Y - 7, $X, $Y - 3, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $X, $Y + 3, $X, $Y + 7, $hPen) _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[1], $hBitmap) If $ccData[5] Then $hBitmap = _WinAPI_CreateBitmap(123, 57, 1, 32) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) $hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000, CC_RGB($__CC_RGB))) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 123, 57, $hBrush) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphics) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _GDIPlus_ImageDispose($hImage) CC_SetBitmap($ccData[5], $hBitmap) EndIf $ccData[22] = 1 If ($iIndex <> 1) Or (Not $fSkip) Then For $i = 10 To 12 GUICtrlSetData($ccData[$i], $__CC_RGB[$i - 10]) Next EndIf If ($iIndex <> 2) Or (Not $fSkip) Then For $i = 13 To 15 GUICtrlSetData($ccData[$i], $__CC_HSL[$i - 13]) Next EndIf If ($iIndex <> 3) Or (Not $fSkip) Then For $i = 16 To 18 GUICtrlSetData($ccData[$i], $__CC_HSB[$i - 16]) Next EndIf If ($iIndex <> 4) Or (Not $fSkip) Then GUICtrlSetData($ccData[19], Hex(CC_RGB($__CC_RGB), 6)) EndIf $ccData[22] = 0 If Not $fSkip Then GUICtrlSetState($ccData[23], $GUI_FOCUS) EndIf EndFunc ;==>CC_Update Func CC_ValidateColor($iColor, $iType) For $i = 0 To 2 $__CC_RGB[$i] = 0 $__CC_HSL[$i] = 0 $__CC_HSB[$i] = 0 Next $__CC_HSL[0] = 160 Switch $iType Case 0 $__CC_RGB = CC_SplitColor($iColor) $ccData[20] = 1 Case 1 If (UBound($iColor) = 3) And (Not UBound($iColor, 2)) Then For $i = 0 To 2 $__CC_HSL[$i] = Round($iColor[$i]) If ($__CC_HSL[$i] < 0) Or ($__CC_HSL[$i] > 240) Then $__CC_HSL = $__CC_RGB ExitLoop EndIf Next If Not $__CC_HSL[1] Then $__CC_HSL[0] = 160 EndIf EndIf $ccData[20] = 2 Case 2 If (UBound($iColor) = 3) And (Not UBound($iColor, 2)) Then $__CC_HSB[0] = Round($iColor[0]) If Abs($__CC_HSB[0]) >= 360 Then $__CC_HSB[0] = Mod($__CC_HSB[0], 360) EndIf If $__CC_HSB[0] < 0 Then $__CC_HSB[0] += 360 EndIf For $i = 1 To 2 $__CC_HSB[$i] = Round($iColor[$i]) If ($__CC_HSB[$i] < 0) Or ($__CC_HSB[$i] > 100) Then $__CC_HSB = $__CC_RGB ExitLoop EndIf Next EndIf $ccData[20] = 3 Case Else $ccData[20] = 1 EndSwitch EndFunc ;==>CC_ValidateColor #EndRegion Internal Functions #Region Color Convertion Functions Func _HSL2RGB($aHSL) If Not $aHSL[1] Then $aHSL[0] = 160 EndIf Local $Ret = DllCall('shlwapi.dll', 'dword', 'ColorHLSToRGB', 'dword', $aHSL[0], 'dword', $aHSL[2], 'dword', $aHSL[1]) Local $RGB[3] = [0, 0, 0] If IsArray($Ret) Then $RGB = CC_SplitColor(CC_SwitchColor($Ret[0])) EndIf Return $RGB EndFunc ;==>_HSL2RGB Func _HSB2RGB($aHSB) Local $RGB[3], $H, $L, $F, $P, $Q, $T For $i = 1 To 2 $aHSB[$i] /= 100 Next If $aHSB[1] = 0 Then For $i= 0 To 2 $RGB[$i] = $aHSB[2] Next Else $H = $aHSB[0] / 60 $L = Floor($H) $F = $H - $L $P = $aHSB[2] * (1 - $aHSB[1]) $Q = $aHSB[2] * (1 - $aHSB[1] * $F) $T = $aHSB[2] * (1 - $aHSB[1] * (1 - $F)) Switch $L Case 1 $RGB[0] = $Q $RGB[1] = $aHSB[2] $RGB[2] = $P Case 2 $RGB[0] = $P $RGB[1] = $aHSB[2] $RGB[2] = $T Case 3 $RGB[0] = $P $RGB[1] = $Q $RGB[2] = $aHSB[2] Case 4 $RGB[0] = $T $RGB[1] = $P $RGB[2] = $aHSB[2] Case 5 $RGB[0] = $aHSB[2] $RGB[1] = $P $RGB[2] = $Q Case Else $RGB[0] = $aHSB[2] $RGB[1] = $T $RGB[2] = $P EndSwitch EndIf For $i = 0 To 2 $RGB[$i] = Round($RGB[$i] * 255) Next Return $RGB EndFunc ;==>_HSB2RGB Func _RGB2HSL($aRGB) Local $Ret = DllCall('shlwapi.dll', 'none', 'ColorRGBToHLS', 'dword', CC_SwitchColor(CC_RGB($aRGB)), 'dword*', 0, 'dword*', 0, 'dword*', 0) Local $HSL[3] = [160, 0, 0] If IsArray($Ret) Then $HSL[0] = $Ret[2] $HSL[1] = $Ret[4] $HSL[2] = $Ret[3] EndIf Return $HSL EndFunc ;==>_RGB2HSL Func _RGB2HSB($aRGB) Local $Min = 255, $Max = 0 Local $HSB[3], $D, $H For $i = 0 To 2 If $aRGB[$i] > $Max Then $Max = $aRGB[$i] EndIf If $aRGB[$i] < $Min Then $Min = $aRGB[$i] EndIf Next If $Min = $Max Then $HSB[0] = 0 $HSB[1] = 0 $HSB[2] = $Max / 255 Else If $aRGB[0] = $Min Then $D = $aRGB[1] - $aRGB[2] $H = 3 Else If $aRGB[1] = $Min Then $D = $aRGB[2] - $aRGB[0] $H = 5 Else $D = $aRGB[0] - $aRGB[1] $H = 1 EndIf EndIf $HSB[0] = ($H - ($D / ($Max - $Min))) / 6 $HSB[1] = ($Max - $Min) / $Max $HSB[2] = $Max / 255 EndIf $HSB[0] = Round($HSB[0] * 360) If $HSB[0] = 360 Then $HSB[0] = 0 EndIf For $i = 1 To 2 $HSB[$i] = Round($HSB[$i] * 100) Next Return $HSB EndFunc ;==>_RGB2HSB #EndRegion Color Convertion Functions #Region GDI+ Functions Func __GDIPlus_BitmapCreateFromStream($hStream) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipCreateBitmapFromStream', 'ptr', $hStream, 'int*', 0) If @error Then Return SetError(@error, @extended, 0) EndIf Return $aResult[2] EndFunc ;==>__GDIPlus_BitmapCreateFromStream Func __GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipBitmapGetPixel', 'hwnd', $hBitmap, 'int', $iX, 'int', $iY, 'uint*', 0) If @error Then Return SetError(@error, @extended, 0) EndIf Return $aResult[4] EndFunc ;==>__GDIPlus_BitmapGetPixel Func __GDIPlus_ImageRotateFlip($hImage, $iRotateFlip) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipImageRotateFlip', 'hwnd', $hImage, 'int', $iRotateFlip) If @error Then Return SetError(@error, @extended, False) EndIf Return $aResult[0] = 0 EndFunc ;==>__GDIPlus_ImageRotateFlip Func __GDIPlus_LineBrushCreate($nX1, $nY1, $nX2, $nY2, $iARGB1, $iARGB2, $iWrap = 0) Local $tPoint1 = DllStructCreate('float;float') Local $tPoint2 = DllStructCreate('float;float') DllStructSetData($tPoint1, 1, $nX1) DllStructSetData($tPoint1, 2, $nY1) DllStructSetData($tPoint2, 1, $nX2) DllStructSetData($tPoint2, 2, $nY2) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipCreateLineBrush', 'ptr', DllStructGetPtr($tPoint1), 'ptr', DllStructGetPtr($tPoint2), 'uint', $iARGB1, 'uint', $iARGB2, 'int', $iWrap, 'int*', 0) If @error Then Return SetError(@error, @extended, 0) EndIf Return $aResult[6] EndFunc ;==>__GDIPlus_LineBrushCreate Func __GDIPlus_LineBrushSetTransform($hBrush, $hMatrix) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipSetLineTransform', 'hwnd', $hBrush, 'hwnd', $hMatrix) If @error Then Return SetError(@error, @extended, False) EndIf Return $aResult[0] = 0 EndFunc ;==>__GDIPlus_LineBrushSetTransform #EndRegion GDI+ Functions #Region Internal Image Functions Func _Image_Arrow() Local $bArrow = _ '0x89504E470D0A1A0A0000000D49484452000000080000000908060000000F536D' & _ '2E000000097048597300000B1300000B1301009A9C180000000467414D410000' & _ 'B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E90000' & _ '75300000EA6000003A980000176F925FC546000000474944415478DA8490410A' & _ 'C0300804C77C7CDD97DB4B0A364DDA010FB283C2465561BB98480A3A99599DB9' & _ '73CF6041D2E3E24B58A5ADD0A5A3601B4931BEC2ED8B1E02C45F0FD70083FA3C' & _ 'F26952F43C0000000049454E44AE426082' Return CC_LoadImageFromMem($bArrow) EndFunc ;==>_Image_Arrow Func _Image_Picker() Local $bPicker = _ '0x89504E470D0A1A0A0000000D4948445200000013000000130806000000725036' & _ 'CC000000097048597300000B1300000B1301009A9C180000000467414D410000' & _ 'B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E90000' & _ '75300000EA6000003A980000176F925FC5460000028C4944415478DAAC943F4F' & _ 'DB4018C67F8E53207692A24AC05586A0B46AAAB62A95BA77AED8D3853F22A253' & _ 'D70A3E010B9E2BBE40D86040480858C2D02EA81EBA958E20085872D421C47F62' & _ '70AECB11514429489CF4CAF6DDBD3F3FEFFBE84E9352725F23C53D8EB4A66977' & _ '4FD2F5DE9142210238383878F27870F000907756A6EB7A66A450886CDB06E88C' & _ '8E8E3A4992F402A95BC12C21B462B1288177854221B06D1BC771181E1E6E03A6' & _ 'AEEB7DC083D46D408F06063AB66D532A95BE5E80767777393A3ACA343CEF3DD0' & _ '0BE8FAFF403D994C67616101C77188A288B5B5359ACD66727878D8764F4E3EF5' & _ 'E7F33F811868DF08CB67B3DA97A5A55F737373E566B3C9FEFE3E8661100441EA' & _ 'E4F8F8737F3EFF0D88801068DF68E5C6C6C607CFF356E238667171B13B6F9A26' & _ 'BEEF1387E133A0A522FA67CF363737CB9EE7AD542A15E238667C7CBCBBA6691A' & _ '7118BE52E545EA995C0BDBDEDE2E371A8DD54AA582EFFBECEDED51AD5689C3F0' & _ '2DC06FCF7B039C5D8AA4EEBA327D15B4B5B555765D77756666862008D8D9D961' & _ '79799987D9EC1820E3307C099CAB3E45EABD0390BE0AF23CAF0BAAD56A4C4D4D' & _ '9137CD319514036DA5A6ADE2FCDA1E55AB5529A594AD564BAEAFAFCB5C2E272D' & _ '215E5B42BCB08418B58418B084C80332679AD95C36DB6309D135310D303F3F6F' & _ '341A8DD5E9E9E96E6993939317A59D0381722C54EA6805419FA669F2B4D58AFF' & _ 'BA353ECECE96007CDFA756AB313131711D28A8BBAE5F77DD330029A5D7E9745A' & _ '8001E800694B08EDBBE3FC2897CB0C0D0D015C0B02E2B4AEF79D2749166800CF' & _ '95CA8CDA9B68961029A0E73408C29C613C55E74CAA92BA20A05377DD945AF781' & _ 'E2A59FB581E4C24D2D67180380A9EC3E531BC34B2009246ADE548A42F50DC09F' & _ '010041B73CFDB70CCD6E0000000049454E44AE426082' Return CC_LoadImageFromMem($bPicker) EndFunc ;==>_Image_Picker #EndRegion Internal Image Functions #Region Windows Message Functions Func CC_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) ; Handler from ColorPicker.au3 If (IsDeclared('__CP_WM0111')) And (Not Eval('__CP_WM0111')) Then $__CC_WM0111 = 1 Call('CP' & '_WM_COMMAND', $hWnd, $iMsg, $wParam, $lParam) $__CC_WM0111 = 0 EndIf If (Not $ccData[0]) Or ($ccData[22]) Then Return $GUI_RUNDEFMSG EndIf Local $ID = BitAND($wParam, 0xFFFF) Switch $hWnd Case $ccData[0] Local $Val, $Data = GUICtrlRead($ID) Switch BitShift($wParam, 16) Case 1 ; STN_DBLCLK GUICtrlSendToDummy($ccData[27], $ID) Case $EN_CHANGE Switch $ID Case $ccData[19] $Val = StringRegExpReplace($Data, '[^[:xdigit:]]', '') Case Else $Val = StringRegExpReplace($Data, '[^0-9]', '') EndSwitch If $Data <> $Val Then GUICtrlSetData($ID, $Val) CC_Beep() EndIf Switch $ID Case $ccData[19] $Val = Number('0x' & $Val) Case Else $Val = Number($Val) EndSwitch Switch $ID Case $ccData[10] ; R If $Val > 255 Then $Val = 255 EndIf If $Val <> $__CC_RGB[0] Then $__CC_RGB[0] = $Val GUICtrlSendToDummy($ccData[24], 1) EndIf Case $ccData[11] ; G If $Val > 255 Then $Val = 255 EndIf If $Val <> $__CC_RGB[1] Then $__CC_RGB[1] = $Val GUICtrlSendToDummy($ccData[24], 1) EndIf Case $ccData[12] ; B If $Val > 255 Then $Val = 255 EndIf If $Val <> $__CC_RGB[2] Then $__CC_RGB[2] = $Val GUICtrlSendToDummy($ccData[24], 1) EndIf Case $ccData[13] ; H If $Val > 240 Then $Val = 240 EndIf If $Val <> $__CC_HSL[0] Then $__CC_HSL[0] = $Val GUICtrlSendToDummy($ccData[24], 2) EndIf Case $ccData[14] ; S If $Val > 240 Then $Val = 240 EndIf If $Val <> $__CC_HSL[1] Then $__CC_HSL[1] = $Val GUICtrlSendToDummy($ccData[24], 2) EndIf Case $ccData[15] ; L If $Val > 240 Then $Val = 240 EndIf If $Val <> $__CC_HSL[2] Then $__CC_HSL[2] = $Val GUICtrlSendToDummy($ccData[24], 2) EndIf Case $ccData[16] ; H If $Val >= 360 Then $Val = Mod($Val, 360) EndIf If $Val <> $__CC_HSB[0] Then $__CC_HSB[0] = $Val GUICtrlSendToDummy($ccData[24], 3) EndIf Case $ccData[17] ; S If $Val > 100 Then $Val = 100 EndIf If $Val <> $__CC_HSB[1] Then $__CC_HSB[1] = $Val GUICtrlSendToDummy($ccData[24], 3) EndIf Case $ccData[18] ; B If $Val > 100 Then $Val = 100 EndIf If $Val <> $__CC_HSB[2] Then $__CC_HSB[2] = $Val GUICtrlSendToDummy($ccData[24], 3) EndIf Case $ccData[19] ; # If $Val <> CC_RGB($__CC_RGB) Then $__CC_RGB = CC_SplitColor($Val) GUICtrlSendToDummy($ccData[24], 4) EndIf EndSwitch Case $EN_KILLFOCUS Switch $ID Case $ccData[10] ; R GUICtrlSetData($ID, $__CC_RGB[0]) Case $ccData[11] ; G GUICtrlSetData($ID, $__CC_RGB[1]) Case $ccData[12] ; B GUICtrlSetData($ID, $__CC_RGB[2]) Case $ccData[13] ; H If Not $__CC_HSL[1] Then $__CC_HSL[0] = 160 EndIf GUICtrlSetData($ID, $__CC_HSL[0]) Case $ccData[14] ; S If Not $__CC_HSL[1] Then $__CC_HSL[0] = 160 GUICtrlSetData($ccData[13], $__CC_HSL[0]) EndIf GUICtrlSetData($ID, $__CC_HSL[1]) Case $ccData[15] ; L GUICtrlSetData($ID, $__CC_HSL[2]) Case $ccData[16] ; H GUICtrlSetData($ID, $__CC_HSB[0]) Case $ccData[17] ; S GUICtrlSetData($ID, $__CC_HSB[1]) Case $ccData[18] ; B GUICtrlSetData($ID, $__CC_HSB[2]) Case $ccData[19] ; # GUICtrlSetData($ID, Hex(CC_RGB($__CC_RGB), 6)) EndSwitch ; Case $EN_SETFOCUS ; GUICtrlSetState($ID, $GUI_FOCUS) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>CC_WM_COMMAND Func CC_WM_NCRBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) If Not $ccData[0] Then Return $GUI_RUNDEFMSG EndIf Switch $hWnd Case $ccData[0] Switch $wParam Case 0x08, 0x09, 0x14, 0x15 ; HTMINBUTTON, HTMAXBUTTON, HTCLOSE, HTHELP Return 0 EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>CC_WM_NCRBUTTONDOWN Func CC_WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) Local $Result ; Handler from ColorPicker.au3 If (IsDeclared('__CP_WM0020')) And (Not Eval('__CP_WM0020')) Then $__CC_WM0020 = 1 $Result = Call('CP' & '_WM_SETCURSOR', $hWnd, $iMsg, $wParam, $lParam) $__CC_WM0020 = 0 If Not $Result Then Return 0 EndIf EndIf If Not $ccData[0] Then Return $GUI_RUNDEFMSG EndIf Switch $hWnd Case $ccData[0] If $ccData[9] Then Local $Cursor = GUIGetCursorInfo($ccData[0]) If (Not @error) And ($Cursor[4] = $ccData[1]) Then _WinAPI_SetCursor($ccData[9]) Return 0 EndIf EndIf EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>CC_WM_SETCURSOR Func CC_WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam) If Not $ccData[0] Then Return $GUI_RUNDEFMSG EndIf Switch $hWnd Case $ccData[0] Switch $wParam Case 0xF100 ; SC_KEYMENU Return 0 EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>CC_WM_SYSCOMMAND #EndRegion Windows Message Functions Br,UEZ1 point