;www.autoitscript.com/forum/topic/134878-guiregistermsg-replacement-for-guictrlsetonevent-and-guigetmsg ;www.autoitscript.com/forum/topic/188405-how-to-copy-file-to-a-detected-removable-drive ;www.autoitscript.com/forum/topic/112182-button-stop-dont-work-when-function-is-active ;www.autoitscript.com/forum/topic/190000-how-to-use-regexp-to-make-this-work-faster ;www.autoitscript.com/forum/topic/144469-solved-dynamic-directory-treeview ;www.autoitscript.com/forum/topic/111457-selective-folders-selection ;www.therks.com/wp/wp-content/uploads/2018/04/FileGetIcon.html ;www.autoitscript.com/forum/topic/125251-tvexplorer-udf #NoTrayIcon #RequireAdmin #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include Opt('SendKeyDelay', 0) Opt('MouseClickDelay', 0) Opt('SendKeyDownDelay', 0) Opt('MouseClickDownDelay', 0) Opt('MouseClickDragDelay', 0) Opt('WinTitleMatchMode', 3) Opt('WinWaitDelay', 0) _Singleton(@ScriptName, 0) FileChangeDir(StringRegExpReplace(@ScriptDir, '\\+$', '')) Global $MainGui = GUICreate('', 530, 400, (@DesktopWidth - 530)/2, (@DesktopHeight - 400)/2, BitOR($WS_CAPTION, $WS_SYSMENU, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX)) Global $FileExplorerTreeView = GUICtrlCreateTreeView(0, 0, 530, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES)) Global $CheckedFilesButton = GUICtrlCreateButton('Return', 0, 370, 100, 30, BitOR($BS_CENTER, $BS_MULTILINE)) GUICtrlSetResizing($CheckedFilesButton, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKSIZE) GUICtrlSetResizing($FileExplorerTreeView, $GUI_DOCKBORDERS) Global $ImageListIconWidth = _WinAPI_GetSystemMetrics($SM_CXSMICON) Global $ImageListIconHeight = _WinAPI_GetSystemMetrics($SM_CYSMICON) Global $TreeViewImageListHandle = _GUIImageList_Create($ImageListIconWidth, $ImageListIconHeight, 5, 1) _GUICtrlTreeView_SetNormalImageList($FileExplorerTreeView, $TreeViewImageListHandle) _WinAPI_SetWindowTheme(ControlGetHandle($MainGui, '', $FileExplorerTreeView), 'Explorer', 0) GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY') GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND') GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND') GUIRegisterMsg($WM_DEVICECHANGE, 'WM_DEVICECHANGE') GUISetState(@SW_SHOW, $MainGui) $DriveTypesList = StringSplit('ALL', '|', $STR_ENTIRESPLIT) For $i = 1 to $DriveTypesList[0] $DrivesList = DriveGetDrive($DriveTypesList[$i]) If IsArray($DrivesList) Then For $j = 1 to $DrivesList[0] If DriveStatus($DrivesList[$j]) = 'READY' Then $TreeViewItemHandle = _GUICtrlTreeView_FindItemEx($FileExplorerTreeView, StringUpper($DrivesList[$j])) If $TreeViewItemHandle <> 0 Then _GUICtrlTreeView_DeleteChildren($FileExplorerTreeView, $TreeViewItemHandle) _GUICtrlTreeView_Delete($FileExplorerTreeView, $TreeViewItemHandle) EndIf $TreeViewItemId = GUICtrlCreateTreeViewItem(StringUpper($DrivesList[$j]), $FileExplorerTreeView) If $TreeViewItemId <> 0 Then _SetTreeViewItemIcon($FileExplorerTreeView, GUICtrlGetHandle($TreeViewItemId)) _GUICtrlTreeView_SetChildren($FileExplorerTreeView, GUICtrlGetHandle($TreeViewItemId), True) EndIf EndIf Next EndIf Next While 1 Sleep(1000) WEnd Func _ForceQuit() TraySetState($TRAY_ICONSTATE_HIDE) ProcessClose(@AutoItPID) EndFunc Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam) Switch $wParam Case $SC_CLOSE _ForceQuit() EndSwitch EndFunc Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) If not IsDeclared('__ControlEventHandlerDummy') Then Global $__ControlEventHandlerDummy = GUICtrlCreateDummy() GUICtrlSetOnEvent($__ControlEventHandlerDummy, '_ControlEventHandlerProc') EndIf If not IsDeclared('__ControlEventInfo') Then Global $__ControlEventInfo = 0 If not IsDeclared('__TreeViewItemExpanding') Then Global $__TreeViewItemExpanding = False If not IsDeclared('__PreviousGuiEventModeState') Then Global $__PreviousGuiEventModeState = Opt('GUIOnEventMode') If _WinAPI_GetClassName($lParam) <> 'SysTreeView32' and $__TreeViewItemExpanding = True Then MsgBox($MB_OK, 'Info', 'Please wait until treeview finishes expanding selected item.') Return 1 Else Switch _WinAPI_GetClassName($lParam) Case 'Button' Switch _WinAPI_HiWord($wParam) Case $BN_CLICKED Switch _WinAPI_LoWord($wParam) Case $CheckedFilesButton $__PreviousGuiEventModeState = Opt('GUIOnEventMode', 1) $__ControlEventInfo = _WinAPI_MakeLong(_WinAPI_LoWord($wParam), _WinAPI_HiWord($wParam)) GUICtrlSendToDummy($__ControlEventHandlerDummy, 0) EndSwitch EndSwitch EndSwitch EndIf EndFunc Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) If not IsDeclared('__ControlEventHandlerDummy') Then Global $__ControlEventHandlerDummy = GUICtrlCreateDummy() GUICtrlSetOnEvent($__ControlEventHandlerDummy, '_ControlEventHandlerProc') EndIf If not IsDeclared('__ControlEventInfo') Then Global $__ControlEventInfo = 0 If not IsDeclared('__TreeViewItemExpanding') Then Global $__TreeViewItemExpanding = False If not IsDeclared('__CheckedTreeViewItemPaths') Then Global $__CheckedTreeViewItemPaths = '' If not IsDeclared('__PreviousGuiEventModeState') Then Global $__PreviousGuiEventModeState = Opt('GUIOnEventMode') Local $sDrive, $sDir, $sFilename, $sExtension $tNotificationHeaderInfo = DllStructCreate($tagNMHDR, $lParam) Switch _WinAPI_GetClassName(DllStructGetData($tNotificationHeaderInfo, 'hWndFrom')) Case 'SysTreeView32' Switch DllStructGetData($tNotificationHeaderInfo, 'Code') Case $NM_CLICK, $NM_DBLCLK $sTreeViewEvent = DllStructGetData($tNotificationHeaderInfo, 'Code') $sTreeViewHandle = DllStructGetData($tNotificationHeaderInfo, 'hWndFrom') $tPointControl = _WinAPI_GetMousePos(True, $sTreeViewHandle) $tTreeViewHitTestInfo = _GUICtrlTreeView_HitTestEx($sTreeViewHandle, DllStructGetData($tPointControl, 'X'), DllStructGetData($tPointControl, 'Y')) $sTreeViewItemHandle = DllStructGetData($tTreeViewHitTestInfo, 'Item') $sTreeViewHitTestFlags = DllStructGetData($tTreeViewHitTestInfo, 'Flags') $sTreeViewItemPath = StringReplace(_GUICtrlTreeView_GetTree($sTreeViewHandle, $sTreeViewItemHandle), Opt('GUIDataSeparatorChar'), '\') If $sTreeViewItemPath <> '' and not StringInStr($sTreeViewItemPath, '\') Then $sTreeViewItemPath = $sTreeViewItemPath & '\' Select Case $sTreeViewEvent = $NM_CLICK and BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMSTATEICON) ;notification is generated before item state is changed If _GUICtrlTreeView_GetChecked($sTreeViewHandle, $sTreeViewItemHandle) = False Then $__CheckedTreeViewItemPaths = $__CheckedTreeViewItemPaths & $sTreeViewItemPath & @CRLF Else $__CheckedTreeViewItemPaths = StringReplace($__CheckedTreeViewItemPaths, $sTreeViewItemPath & @CRLF, '') EndIf Case ($sTreeViewEvent = $NM_CLICK and BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMBUTTON)) or ($sTreeViewEvent = $NM_DBLCLK and (BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMICON) or BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMLABEL))) If $__TreeViewItemExpanding = True Then If _GUICtrlTreeView_GetExpanded($sTreeViewHandle, $sTreeViewItemHandle) = False Then MsgBox($MB_OK, 'Info', 'Cant expand multiple treeview items at the same time, please wait until treeview finishes expanding previously selected item.') $sSelectedTreeViewItemHandle = _GUICtrlTreeView_GetSelection($sTreeViewHandle) If $sSelectedTreeViewItemHandle <> 0 Then _GUICtrlTreeView_SetSelected($sTreeViewHandle, $sSelectedTreeViewItemHandle, False) EndIf Return 1 Else If _GUICtrlTreeView_GetExpanded($sTreeViewHandle, $sTreeViewItemHandle) = False and _GUICtrlTreeView_GetChildCount($sTreeViewHandle, $sTreeViewItemHandle) <= 0 Then _PathSplit($sTreeViewItemPath, $sDrive, $sDir, $sFilename, $sExtension) Switch DriveStatus($sDrive) Case 'READY' If _GUICtrlTreeView_GetChildren($sTreeViewHandle, $sTreeViewItemHandle) = True and _GUICtrlTreeView_GetChildCount($sTreeViewHandle, $sTreeViewItemHandle) <= 0 Then $__PreviousGuiEventModeState = Opt('GUIOnEventMode', 1) $__ControlEventInfo = _WinAPI_MakeLong(DllStructGetData($tNotificationHeaderInfo, 'IDFrom'), $sTreeViewEvent) GUICtrlSendToDummy($__ControlEventHandlerDummy, _WinAPI_MakeLong(_GUICtrlTreeView_GetItemParam($sTreeViewHandle, $sTreeViewItemHandle), $sTreeViewHitTestFlags)) EndIf Case Else _GUICtrlTreeView_SetChecked($sTreeViewHandle, $sTreeViewItemHandle, False) _GUICtrlTreeView_DeleteChildren($sTreeViewHandle, $sTreeViewItemHandle) _GUICtrlTreeView_SetChildren($sTreeViewHandle, $sTreeViewItemHandle, True) $sCheckedTreeViewItemsPathList = StringSplit($__CheckedTreeViewItemPaths, @CRLF, $STR_ENTIRESPLIT) If IsArray($sCheckedTreeViewItemsPathList) Then For $i = 1 to $sCheckedTreeViewItemsPathList[0] If StringLeft($sCheckedTreeViewItemsPathList[$i], StringLen($sDrive & '\')) = ($sDrive & '\') Then $__CheckedTreeViewItemPaths = StringReplace($__CheckedTreeViewItemPaths, $sCheckedTreeViewItemsPathList[$i] & @CRLF, '') Next EndIf MsgBox($MB_OK, 'Info', 'Drive ' & StringUpper($sDrive) & ' is not ready.') EndSwitch EndIf EndIf Case $sTreeViewEvent = $NM_DBLCLK and BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMBUTTON) If $__TreeViewItemExpanding = True and _GUICtrlTreeView_GetExpanded($sTreeViewHandle, $sTreeViewItemHandle) = True Then Return 1 EndSelect Case $TVN_SELCHANGINGA, $TVN_SELCHANGINGW, $NM_SETFOCUS Return 1 EndSwitch EndSwitch EndFunc Func WM_DEVICECHANGE($hWnd, $iMsg, $wParam, $lParam) $DBTF_NET = 0x0002 $DBTF_MEDIA = 0x0001 $DBT_DEVICEARRIVAL = 0x00008000 $DBT_DEVTYP_VOLUME = 0x00000002 $DBT_DEVICEREMOVECOMPLETE = 0x00008004 $sDevBroadcastHeaderInfo = 'dword dbch_size;dword dbch_devicetype;dword dbch_reserved' $sDevBroadcastVolumeInfo = 'dword dbcv_size;dword dbcv_devicetype;dword dbcv_reserved;dword dbcv_unitmask;dword dbcv_flags' Switch $wParam Case $DBT_DEVICEARRIVAL $tDevBroadcastHeaderInfo = DllStructCreate($sDevBroadcastHeaderInfo, $lParam) Switch DllStructGetData($tDevBroadcastHeaderInfo, 'dbch_devicetype') Case $DBT_DEVTYP_VOLUME $tDevBroadcastVolumeInfo = DllStructCreate($sDevBroadcastVolumeInfo, $lParam) $sVolumeUnitMask = DllStructGetData($tDevBroadcastVolumeInfo, 'dbcv_unitmask') $sDrivesList = StringSplit(StringUpper(_GetDriveLetterFromVolumeUnitMask($sVolumeUnitMask)), '|', $STR_ENTIRESPLIT) For $i = 1 to $sDrivesList[0] $sTreeViewItemHandle = _GUICtrlTreeView_FindItemEx($FileExplorerTreeView, StringUpper($sDrivesList[$i])) If $sTreeViewItemHandle <> 0 Then _GUICtrlTreeView_DeleteChildren($FileExplorerTreeView, $sTreeViewItemHandle) _GUICtrlTreeView_Delete($FileExplorerTreeView, $sTreeViewItemHandle) EndIf $sTreeViewItemId = GUICtrlCreateTreeViewItem(StringUpper($sDrivesList[$i]), $FileExplorerTreeView) If $sTreeViewItemId <> 0 Then _SetTreeViewItemIcon($FileExplorerTreeView, GUICtrlGetHandle($sTreeViewItemId)) _GUICtrlTreeView_SetChildren($FileExplorerTreeView, GUICtrlGetHandle($sTreeViewItemId), True) EndIf Next EndSwitch Case $DBT_DEVICEREMOVECOMPLETE $tDevBroadcastHeaderInfo = DllStructCreate($sDevBroadcastHeaderInfo, $lParam) Switch DllStructGetData($tDevBroadcastHeaderInfo, 'dbch_devicetype') Case $DBT_DEVTYP_VOLUME $tDevBroadcastVolumeInfo = DllStructCreate($sDevBroadcastVolumeInfo, $lParam) $sVolumeUnitMask = DllStructGetData($tDevBroadcastVolumeInfo, 'dbcv_unitmask') $sDrivesList = StringSplit(StringUpper(_GetDriveLetterFromVolumeUnitMask($sVolumeUnitMask)), '|', $STR_ENTIRESPLIT) For $i = 1 to $sDrivesList[0] $sTreeViewItemHandle = _GUICtrlTreeView_FindItemEx($FileExplorerTreeView, StringUpper($sDrivesList[$i])) If $sTreeViewItemHandle <> 0 Then _GUICtrlTreeView_DeleteChildren($FileExplorerTreeView, $sTreeViewItemHandle) _GUICtrlTreeView_Delete($FileExplorerTreeView, $sTreeViewItemHandle) EndIf $sCheckedTreeViewItemsPathList = StringSplit($__CheckedTreeViewItemPaths, @CRLF, $STR_ENTIRESPLIT) If IsArray($sCheckedTreeViewItemsPathList) Then For $j = 1 to $sCheckedTreeViewItemsPathList[0] If StringLeft($sCheckedTreeViewItemsPathList[$j], StringLen($sDrivesList[$i] & '\')) = ($sDrivesList[$i] & '\') Then $__CheckedTreeViewItemPaths = StringReplace($__CheckedTreeViewItemPaths, $sCheckedTreeViewItemsPathList[$j] & @CRLF, '') Next EndIf Next EndSwitch EndSwitch EndFunc Func _ControlEventHandlerProc() If not IsDeclared('__ControlEventHandlerDummy') Then Global $__ControlEventHandlerDummy = GUICtrlCreateDummy() GUICtrlSetOnEvent($__ControlEventHandlerDummy, '_ControlEventHandlerProc') EndIf If not IsDeclared('__ControlEventInfo') Then Global $__ControlEventInfo = 0 If not IsDeclared('__TreeViewItemExpanding') Then Global $__TreeViewItemExpanding = False If not IsDeclared('__PreviousGuiEventModeState') Then Global $__PreviousGuiEventModeState = Opt('GUIOnEventMode') Opt('GUIOnEventMode', $__PreviousGuiEventModeState) Switch _WinAPI_LoWord($__ControlEventInfo) Case $CheckedFilesButton _ProcessCheckedFiles() Case $FileExplorerTreeView $sTreeViewEvent = _WinAPI_HiWord($__ControlEventInfo) $sTreeViewHandle = GUICtrlGetHandle(_WinAPI_LoWord($__ControlEventInfo)) $sTreeViewItemHandle = GUICtrlGetHandle(_WinAPI_LoWord(GUICtrlRead($__ControlEventHandlerDummy))) $sTreeViewHitTestFlags = _WinAPI_HiWord(GUICtrlRead($__ControlEventHandlerDummy)) If ($sTreeViewEvent = $NM_CLICK and BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMBUTTON)) or ($sTreeViewEvent = $NM_DBLCLK and (BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMICON) or BitAND($sTreeViewHitTestFlags, $TVHT_ONITEMLABEL))) Then $__TreeViewItemExpanding = True _AddFolderContentToTreeView($sTreeViewHandle, $sTreeViewItemHandle) $__TreeViewItemExpanding = False EndIf EndSwitch $__ControlEventInfo = 0 EndFunc Func _AddFolderContentToTreeView($sTreeViewHandle, $sParentTreeViewItemHandle, $sIncludeHiddenPaths = True, $sIncludeSuperHiddenPaths = True, $sAutoExpand = True) $SHCONTF_FOLDERS = 0x00020 $SHCONTF_NONFOLDERS = 0x00040 $SHCONTF_INCLUDEHIDDEN = 0x00080 $SHCONTF_INCLUDESUPERHIDDEN = 0x10000 $sParentTreeViewItemExpanded = False If not IsHWnd($sTreeViewHandle) and GUICtrlGetHandle($sTreeViewHandle) = 0 Then Return SetError(1, 0, False) $sParentTreeViewItemId = _GUICtrlTreeView_GetItemParam($sTreeViewHandle, $sParentTreeViewItemHandle) $sParentTreeViewItemPath = StringReplace(_GUICtrlTreeView_GetTree($sTreeViewHandle, $sParentTreeViewItemHandle), Opt('GUIDataSeparatorChar'), '\') If $sParentTreeViewItemPath <> '' and not StringInStr($sParentTreeViewItemPath, '\') Then $sParentTreeViewItemPath = $sParentTreeViewItemPath & '\' If not FileExists($sParentTreeViewItemPath) Then Return SetError(2, 0, False) $oShellFolderItems = _GetShellFolderObject($sParentTreeViewItemPath, True) If not IsObj($oShellFolderItems) Then Return SetError(3, 0, False) $oShellFolderItemsFilterFlags = $SHCONTF_FOLDERS If $sIncludeHiddenPaths = True Then $oShellFolderItemsFilterFlags = BitOR($oShellFolderItemsFilterFlags, $SHCONTF_INCLUDEHIDDEN) If $sIncludeSuperHiddenPaths = True Then $oShellFolderItemsFilterFlags = BitOR($oShellFolderItemsFilterFlags, $SHCONTF_INCLUDESUPERHIDDEN) $oShellFolderItems.Filter($oShellFolderItemsFilterFlags, '*') For $oShellFolderItem in $oShellFolderItems $sShellFolderItemName = $oShellFolderItem.Name() If StringRight($oShellFolderItem.Path(), StringLen('.lnk')) = '.lnk' Then $sShellFolderItemName = $sShellFolderItemName & '.lnk' $sTreeViewItemId = GUICtrlCreateTreeViewItem($sShellFolderItemName, $sParentTreeViewItemId) If $sTreeViewItemId <> 0 Then _SetTreeViewItemIcon($sTreeViewHandle, GUICtrlGetHandle($sTreeViewItemId)) $sFolderInfo = DirGetSize($oShellFolderItem.Path(), $DIR_EXTENDED + $DIR_NORECURSE) If IsArray($sFolderInfo) Then $sFolderContentCount = $sFolderInfo[1] + $sFolderInfo[2] If $sFolderContentCount > 0 Then _GUICtrlTreeView_SetChildren($sTreeViewHandle, GUICtrlGetHandle($sTreeViewItemId), True) EndIf If $sParentTreeViewItemExpanded = False and $sAutoExpand = True Then _GUICtrlTreeView_Expand($sTreeViewHandle, $sParentTreeViewItemHandle, True) $sParentTreeViewItemExpanded = True EndIf EndIf Next $oShellFolderItemsFilterFlags = BitOR(BitXOR($oShellFolderItemsFilterFlags, $SHCONTF_FOLDERS), $SHCONTF_NONFOLDERS) $oShellFolderItems.Filter($oShellFolderItemsFilterFlags, '*') For $oShellFolderItem in $oShellFolderItems $sShellFolderItemName = $oShellFolderItem.Name() If StringRight($oShellFolderItem.Path(), StringLen('.lnk')) = '.lnk' Then $sShellFolderItemName = $sShellFolderItemName & '.lnk' $sTreeViewItemId = GUICtrlCreateTreeViewItem($sShellFolderItemName, $sParentTreeViewItemId) If $sTreeViewItemId <> 0 Then _SetTreeViewItemIcon($sTreeViewHandle, GUICtrlGetHandle($sTreeViewItemId)) If $sParentTreeViewItemExpanded = False and $sAutoExpand = True Then _GUICtrlTreeView_Expand($sTreeViewHandle, $sParentTreeViewItemHandle, True) $sParentTreeViewItemExpanded = True EndIf EndIf Next Return True EndFunc Func _GetShellFolderObject($sPath, $sReturnFolderItemsObject = False) If not FileExists($sPath) Then Return SetError(1, 0, False) $oShellApplication = ObjCreate('Shell.Application') If not IsObj($oShellApplication) Then Return SetError(2, 0, False) $oShellFolder = $oShellApplication.NameSpace($sPath) If not IsObj($oShellFolder) Then Return SetError(3, 0, False) If $sReturnFolderItemsObject = False Then Return $oShellFolder $oShellFolderItems = $oShellFolder.Items() If not IsObj($oShellFolderItems) Then Return SetError(4, 0, False) Return $oShellFolderItems EndFunc Func _SetTreeViewItemIcon($sTreeViewHandle, $sTreeViewItemHandle) Local $sDrive, $sDir, $sFilename, $sExtension If not IsHWnd($sTreeViewHandle) and GUICtrlGetHandle($sTreeViewHandle) = 0 Then Return SetError(1, 0, False) $sTreeViewImageListHandle = _GUICtrlTreeView_GetNormalImageList($sTreeViewHandle) If $sTreeViewImageListHandle = 0 Then Return SetError(2, 0, False) $sTreeViewItemPath = StringReplace(_GUICtrlTreeView_GetTree($sTreeViewHandle, $sTreeViewItemHandle), Opt('GUIDataSeparatorChar'), '\') If $sTreeViewItemPath <> '' and not StringInStr($sTreeViewItemPath, '\') Then $sTreeViewItemPath = $sTreeViewItemPath & '\' If not FileExists($sTreeViewItemPath) Then Return SetError(3, 0, False) _PathSplit($sTreeViewItemPath, $sDrive, $sDir, $sFilename, $sExtension) $sIconPath = '' $sIconIndex = 0 If $sExtension = '.lnk' Then $sShortcutInfo = FileGetShortcut($sTreeViewItemPath) If IsArray($sShortcutInfo) Then $sTreeViewItemPath = _WinAPI_ExpandEnvironmentStrings($sShortcutInfo[0]) If FileExists(_WinAPI_ExpandEnvironmentStrings($sShortcutInfo[4])) Then $sIconPath = _WinAPI_ExpandEnvironmentStrings($sShortcutInfo[4]) $sIconIndex = $sShortcutInfo[5] EndIf EndIf EndIf _PathSplit($sTreeViewItemPath, $sDrive, $sDir, $sFilename, $sExtension) If $sExtension = '.url' Then $sIconPath = _WinAPI_ExpandEnvironmentStrings(IniRead($sTreeViewItemPath, 'InternetShortcut', 'IconFile', '')) $sIconIndex = IniRead($sTreeViewItemPath, 'InternetShortcut', 'IconIndex', '') EndIf If FileExists($sIconPath) Then $sImageListIconIndex = _GUIImageList_AddIcon($sTreeViewImageListHandle, $sIconPath, $sIconIndex) Else $sTreeViewItemPathAttrib = FileGetAttrib($sTreeViewItemPath) If StringInStr($sTreeViewItemPathAttrib, 'D') Then $sShellFileInfoFlags = BitOR($SHGFI_SMALLICON, $SHGFI_SYSICONINDEX) Else $sShellFileInfoFlags = BitOR($SHGFI_ICON, $SHGFI_OVERLAYINDEX, $SHGFI_USEFILEATTRIBUTES, $SHGFI_SMALLICON, $SHGFI_SYSICONINDEX) EndIf $tShellFileInfo = DllStructCreate($tagSHFILEINFO) $sSystemImageListHandle = _WinAPI_ShellGetFileInfo($sTreeViewItemPath, $sShellFileInfoFlags, 0, $tShellFileInfo) $sIconIndex = DllStructGetData($tShellFileInfo, 'iIcon') $sIconHandle = _GUIImageList_GetIcon($sSystemImageListHandle, $sIconIndex) If $sIconHandle <> 0 and StringInStr($sTreeViewItemPathAttrib, 'H') and StringRegExpReplace($sTreeViewItemPath, '\\+$', '') <> $sDrive Then $sIconHandle = _WinAPI_AddIconTransparency($sIconHandle, 50, True) If $sIconHandle <> 0 Then $sImageListIconIndex = _GUIImageList_ReplaceIcon($sTreeViewImageListHandle, -1, $sIconHandle) _WinAPI_DestroyIcon($sIconHandle) Else $sIconIndex = 0 If StringInStr(FileGetAttrib($sTreeViewItemPath), 'D') Then $sIconIndex = 4 $sImageListIconIndex = _GUIImageList_AddIcon($sTreeViewImageListHandle, @SystemDir & '\shell32.dll', $sIconIndex) EndIf EndIf If $sImageListIconIndex = -1 Then Return SetError(4, 0, False) $sFuncReturn = _GUICtrlTreeView_SetImageIndex($sTreeViewHandle, $sTreeViewItemHandle, $sImageListIconIndex) If $sFuncReturn = False Then Return SetError(5, 0, False) Return True EndFunc Func _GetDriveLetterFromVolumeUnitMask($sVolumeUnitMask) $sDrivesList = '' For $i = 1 to 26 If BitAND($sVolumeUnitMask, 0x1) Then $sDrivesList = $sDrivesList & Chr($i - 1 + Asc('A')) & ':|' $sVolumeUnitMask = BitShift($sVolumeUnitMask, 0x1) Next Return StringTrimRight($sDrivesList, StringLen('|')) EndFunc Func _ProcessCheckedFiles() If not IsDeclared('__CheckedTreeViewItemPaths') Then Global $__CheckedTreeViewItemPaths = '' Local $sDrive, $sDir, $sFilename, $sExtension If $__CheckedTreeViewItemPaths = '' Then MsgBox($MB_OK, 'Info', 'You have to check at least 1 file or folder before clicking ' & GUICtrlRead($CheckedFilesButton) & ' button.') Else $sCheckedTreeViewItemsPathList = StringSplit(StringRegExpReplace($__CheckedTreeViewItemPaths, '\R*$', ''), @CRLF, $STR_ENTIRESPLIT) _ArrayDisplay($sCheckedTreeViewItemsPathList) If IsArray($sCheckedTreeViewItemsPathList) Then For $i = 1 to UBound($sCheckedTreeViewItemsPathList) - 1 $sTreeViewItemHandle = _GUICtrlTreeView_FindItemEx($FileExplorerTreeView, StringReplace($sCheckedTreeViewItemsPathList[$i], '\', Opt('GUIDataSeparatorChar'))) If $sTreeViewItemHandle <> 0 Then _GUICtrlTreeView_SetChecked($FileExplorerTreeView, $sTreeViewItemHandle, False) Next EndIf $__CheckedTreeViewItemPaths = '' EndIf EndFunc