SHARE
TWEET

Эксплорер как бы

AZJIO Oct 23rd, 2011 464 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_Outfile=File_manager.exe
  3. #AutoIt3Wrapper_Icon=File_manager.ico
  4. #AutoIt3Wrapper_Compression=4
  5. #AutoIt3Wrapper_Res_Comment=-
  6. #AutoIt3Wrapper_Res_Description=File_manager.exe
  7. #AutoIt3Wrapper_Res_Fileversion=0.3.0.0
  8. #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n
  9. #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
  10. #AutoIt3Wrapper_Res_Language=1049
  11. #AutoIt3Wrapper_Run_Au3check=n
  12. #AutoIt3Wrapper_Res_Field=Version|0.3
  13. #AutoIt3Wrapper_Res_Field=Build|2013.11.12
  14. #AutoIt3Wrapper_Res_Field=Coded by|AZJIO
  15. #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
  16. #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
  17. #AutoIt3Wrapper_Run_Obfuscator=y
  18. #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
  19. #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
  20. #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
  21.  
  22. #include <GUIConstantsEx.au3>
  23. #include <GuiTreeView.au3>
  24. #include <WindowsConstants.au3>
  25. ; #include <GuiImageList.au3>
  26. #include <File.au3>
  27. #include <GuiListView.au3>
  28. #include <GuiStatusBar.au3>
  29. #include <FileOperations.au3>
  30. ; #Include <Array.au3> ; тест
  31.  
  32. Opt("GUIOnEventMode", 1)
  33.  
  34. Global $PathCur, $TrWM_NOTIFY = 0
  35.  
  36. ; En
  37. $LngTitle = 'File manager'
  38. $LngJmp = 'Go'
  39. $LngTmAs = 'Access time :'
  40. $LngSec = 'sec'
  41. $LngBS = 'Up'
  42. ; $LngCpP = 'Copy path'
  43. ; $LngDel = 'Delete'
  44.  
  45. $UserIntLang = @OSLang
  46.  
  47. ; Ru
  48. ; если русская локализация, то русский язык
  49. If $UserIntLang = 0419 Then
  50.         $LngTitle = 'Файловый менеджер'
  51.         $LngJmp = 'Перейти'
  52.         $LngTmAs = 'Время доступа :'
  53.         $LngSec = 'сек'
  54.         $LngBS = 'Вверх'
  55.         ; $LngCpP = 'Копировать путь'
  56.         ; $LngDel = 'Удалить'
  57. EndIf
  58.  
  59. $hGui = GUICreate($LngTitle, 640, 560, -1, -1, $WS_OVERLAPPEDWINDOW)
  60. GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
  61. Local $aParts[3] = [640 - 210, -1]
  62. $hStatusBar = _GUICtrlStatusBar_Create($hGui, $aParts, '', $SBARS_TOOLTIPS + $SBARS_SIZEGRIP)
  63.  
  64. $restart = GUICtrlCreateButton("R", 640 - 20, 2, 18, 20)
  65. GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  66. GUICtrlSetOnEvent(-1, "_restart")
  67.  
  68. $iBS = GUICtrlCreateButton("^", 5, 6, 24, 24)
  69. GUICtrlSetResizing(-1, 2 + 32 + 256 + 512)
  70. GUICtrlSetOnEvent(-1, "_ActionBS")
  71. GUICtrlSetTip(-1, $LngBS)
  72.  
  73. $Address = GUICtrlCreateInput('', 32, 6, 540, 24)
  74. GUICtrlSetResizing(-1, 2 + 4 + 32 + 512)
  75. $go = GUICtrlCreateButton(">", 577, 6, 24, 24)
  76. GUICtrlSetResizing(-1, 4 + 32 + 256 + 512)
  77. GUICtrlSetOnEvent(-1, "_Jump")
  78. GUICtrlSetTip(-1, $LngJmp)
  79.  
  80. $iTreeView = GUICtrlCreateTreeView(0, 35, 216, 500, -1, $WS_EX_CLIENTEDGE)
  81. GUICtrlSetResizing(-1, 2 + 32 + 64 + 256)
  82. $hTreeView = GUICtrlGetHandle($iTreeView)
  83.  
  84. $hImage = _GUIImageList_Create(16, 16, 5, 1)
  85. _GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', -4)
  86. ; _GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', -5)
  87. ; _GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', 0)
  88. _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)
  89.  
  90. $DrivesArr = DriveGetDrive("all")
  91. For $i = 1 To $DrivesArr[0]
  92.         If $DrivesArr[$i] = 'a:' Or DriveGetType($DrivesArr[$i] & '\') = 'CDROM' Then ContinueLoop
  93.         $hTmp = _GUICtrlTreeView_Add($hTreeView, 0, StringUpper($DrivesArr[$i]), 0, 0)
  94.         _GUICtrlTreeView_SetChildren($hTreeView, $hTmp) ; добавляем плюсик
  95. Next
  96.  
  97. $iListView = GUICtrlCreateListView(' ', 220, 35, 420, 500, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, BitOR($LVS_EX_INFOTIP, $WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT))
  98. ; GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_TRACKSELECT, $LVS_EX_TRACKSELECT)
  99. GUICtrlSetBkColor(-1, 0xf0f0f0) ; 0xE0DFE3
  100. GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
  101. $hListView = GUICtrlGetHandle($iListView)
  102. _GUICtrlListView_SetColumnWidth($iListView, 0, 390)
  103.  
  104. Local $g_aExtAssot[1] = [0] ; Белый список ассоциаций
  105. Local $g_aExtBlack[6] = [5, 'exe', 'scr', 'ico', 'ani', 'cur'] ; Чёрный список ассоциаций
  106. $g_hImgAssot = _GUIImageList_Create(16, 16, 5, 1)
  107. _GUICtrlListView_SetImageList($iListView, $g_hImgAssot, 1)
  108. ; _GUICtrlTreeView_SetNormalImageList($hTreeView, $g_hImgAssot)
  109. _GUIImageList_AddIcon($g_hImgAssot, @SystemDir & '\shell32.dll', -4)
  110. ; _GUIImageList_AddIcon($g_hImgAssot, @SystemDir & '\shell32.dll', -5)
  111. For $i = 1 To 10
  112.         _GUIImageList_AddIcon($g_hImgAssot, @SystemDir & '\shell32.dll', 0) ; Делаем кэш 9 иконок для EXE-файлов. В папке первые 9 EXE-файлов будут отображаться своими иконками, а если более 9, то остальные будут пустышками отображаться. надеюсь 9 достаточно.
  113. Next
  114.  
  115. $ReLbl = GUICtrlCreateLabel('', 216, 35, 5, 500)
  116. GUICtrlSetResizing(-1, 2 + 32 + 64 + 256)
  117. GUICtrlSetCursor(-1, 13)
  118. GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_ResizeField")
  119.  
  120. $iDummyEnter = GUICtrlCreateDummy()
  121. GUICtrlSetOnEvent(-1, "_ActionEnter")
  122. Local $AccelKeys[1][2] = [["{Enter}", $iDummyEnter]] ; , ["{Backspace}", $iBS] ; Задейстование Backspace запрещает редактирование в адресной строке
  123. GUISetAccelerators($AccelKeys)
  124.  
  125. ; GUICtrlSetOnEvent(-1, "_OpenExplorer")
  126. GUISetState()
  127. GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
  128. GUIRegisterMsg($WM_SIZE, "WM_SIZE")
  129. GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")
  130.  
  131. ; перейти к нужной папке
  132. ; $StartPath='C:\AutoIt3\Notepad++'
  133. ; GUICtrlSetData($Address, $StartPath)
  134. ; _Jump()
  135.  
  136. While 1
  137.         Sleep(100000)
  138. WEnd
  139.  
  140. Func _Exit()
  141.         Exit
  142. EndFunc   ;==>_Exit
  143.  
  144. Func _ActionBS()
  145.         ; Switch ControlGetFocus($hGui)
  146.                 ; Case 'SysTreeView321', 'SysListView321', 'Button2'
  147.                         ; Local $tmp = StringRegExpReplace($PathCur, '(\\[^\\]+)$', '')
  148.                         ; If @extended Then _Jump1($tmp)
  149.         ; EndSwitch
  150.         ; Local $tmp = StringRegExpReplace($PathCur, '(\\[^\\]+)$', '')
  151.         ; If @extended Then _Jump1($tmp)
  152.        
  153.         ; GUICtrlSetState($iTreeView, $GUI_FOCUS)
  154.         ; ControlFocus($hGui, "", $iTreeView)
  155.         $hItem = _GUICtrlTreeView_GetSelection($hTreeView) ; получает дескриптор
  156.         $hItem = _GUICtrlTreeView_GetParentHandle($hTreeView, $hItem)
  157.         If $hItem Then _GUICtrlTreeView_ClickItem($hTreeView, $hItem)
  158. EndFunc
  159.  
  160. Func _ActionEnter()
  161.         Switch ControlGetFocus($hGui)
  162.                 Case 'Edit1'
  163.                         _Jump()
  164.                 Case 'SysTreeView321'
  165.                         $hItem = _GUICtrlTreeView_GetSelection($hTreeView) ; получает дескриптор
  166.                         $sPath = _GetPathItem($hTreeView, $hItem) ; Получили текущий уже открытый
  167.                         _Jump1($sPath)
  168.                 Case 'SysListView321'
  169.                         _GUICtrlListView_ClickItem($hListView, _GUICtrlListView_GetSelectedIndices($hListView), "left", False, 2)
  170.                         GUICtrlSetState($iListView, $GUI_FOCUS)
  171.         EndSwitch
  172. EndFunc   ;==>_ActionEnter
  173.  
  174. Func _Jump()
  175.         Local $sKey = GUICtrlRead($Address)
  176.         _Jump1($sKey)
  177. EndFunc   ;==>_Jump
  178.  
  179. Func _Jump1($sKey)
  180.         Local $aKey, $hItem, $i, $j, $key, $KeyChild, $sKey2, $sPath, $aPath, $q = 1, $tmp
  181.         If Not FileExists($sKey) Then Return
  182.  
  183.         $hItem = _GUICtrlTreeView_GetSelection($hTreeView) ; получает дескриптор
  184.         $sPath = _GetPathItem($hTreeView, $hItem) ; Получили текущий уже открытый
  185.  
  186.         ; Проверить, является ли установочный путь частью уже открытого пути
  187.         $aKey = StringSplit($sKey, '\')
  188.         $sKey = $aKey[1]
  189.         $sKey2 = $aKey[1]
  190.  
  191.         If $sPath Then
  192.                 $aPath = StringSplit($sPath, '\')
  193.                 If $aPath[0] < $aKey[0] Then ; Берётся минимальный размер массива, чтобы не было сбоя при попытке обратиться к меньшему массиву используя конечный индекс большего массива.
  194.                         $tmp = $aPath[0]
  195.                 Else
  196.                         $tmp = $aKey[0]
  197.                 EndIf
  198.  
  199.                 ; Вычисление начала отсчёта
  200.                 For $i = 1 To $tmp
  201.                         If $aPath[$i] <> $aKey[$i] Then ExitLoop
  202.                         If $i = 1 Then ContinueLoop
  203.                         $q += 1
  204.                         $sKey &= '|' & $aKey[$i]
  205.                         $sKey2 &= '\' & $aKey[$i]
  206.                 Next
  207.         EndIf
  208.         ; MsgBox(0, $i, $sKey & @LF & $sKey2 & @LF & $q & @LF & $aKey[0])
  209.  
  210.         For $i = $q To $aKey[0]
  211.                 If $i > $q Then
  212.                         $sKey &= '|' & $aKey[$i]
  213.                         $sKey2 &= '\' & $aKey[$i]
  214.                 EndIf
  215.                
  216.                 ControlTreeView($hGui, "", $hTreeView, "Select", $sKey) ; выделяет раздел
  217.                 If @error Then
  218.                         If $i = $q Then
  219.                                 Return
  220.                         Else
  221.                                 ExitLoop
  222.                         EndIf
  223.                 EndIf
  224.                 $hItem = _GUICtrlTreeView_GetSelection($hTreeView) ; получает дескриптор
  225.  
  226.                 If _GUICtrlTreeView_GetChildren($hTreeView, $hItem) And Not _GUICtrlTreeView_ExpandedOnce($hTreeView, $hItem) Then
  227.                         $tmp = _FileListToArray($sKey2, "*", 2)
  228.                         If @error Then Return
  229.                         For $j = 1 To $tmp[0]
  230.                                 $tmp1 = _GUICtrlTreeView_AddChild($hTreeView, $hItem, $tmp[$j], 0, 0)
  231.                                 $search = FileFindFirstFile($sKey2 & '\' & $tmp[$j] & '\*')
  232.                                 If $search <> -1 Then
  233.                                         While 1
  234.                                                 $file = FileFindNextFile($search)
  235.                                                 If @error Then ExitLoop
  236.                                                 If @extended Then
  237.                                                         _GUICtrlTreeView_SetChildren($hTreeView, $tmp1) ; добавляем плюсик
  238.                                                         ExitLoop
  239.                                                 EndIf
  240.                                         WEnd
  241.                                 EndIf
  242.                                 $tmp1 = ''
  243.                                 FileClose($search)
  244.                         Next
  245.                 EndIf
  246.                 _GUICtrlTreeView_Expand($hTreeView, $hItem) ; разворачивает пункт
  247.         Next
  248.         _GUICtrlTreeView_ClickItem($hTreeView, $hItem, "left", False)
  249. EndFunc   ;==>_Jump1
  250.  
  251. Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
  252.         _GUICtrlStatusBar_Resize($hStatusBar)
  253.         Local $aParts[3] = [BitAND($ilParam, 0xFFFF) - 210, -1]
  254.         _GUICtrlStatusBar_SetParts($hStatusBar, $aParts)
  255.         Return $GUI_RUNDEFMSG
  256. EndFunc   ;==>WM_SIZE
  257.  
  258. Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
  259.         Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tmp, $TrWM_NOTIFY = 1
  260.  
  261.         $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
  262.         $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
  263.         $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
  264.         $iCode = DllStructGetData($tNMHDR, "Code")
  265.         Switch $hWndFrom
  266.                 Case $hTreeView
  267.                         Switch $iCode
  268.                                 Case $NM_CLICK
  269.                                         ; получение хэндла кликнутого пункта и поиск его в массиве
  270.                                         Local $tMPos = _WinAPI_GetMousePos(True, $hWndFrom), $tHit = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
  271.                                         Local $hItem = DllStructGetData($tHit, "Item")
  272.                                         If $hItem > 0 Then
  273.                                                 $tmp = _GetPathItem($hWndFrom, $hItem)
  274.                                                 If $PathCur = $tmp Then
  275.                                                         Return
  276.                                                 Else
  277.                                                         $PathCur = $tmp
  278.                                                 EndIf
  279.                                                 GUICtrlSetData($Address, $PathCur)
  280.                                                
  281.                                                 $timer = TimerInit()
  282.                                                 _ListView_Update()
  283.                                                
  284.                                                 If _GUICtrlTreeView_GetChildren($hWndFrom, $hItem) And Not _GUICtrlTreeView_ExpandedOnce($hWndFrom, $hItem) Then
  285.                                                         $tmp = _FileListToArray($PathCur, "*", 2)
  286.                                                         If @error Then Return
  287.                                                         ; _GUICtrlTreeView_BeginUpdate($hWndFrom)
  288.                                                         For $i = 1 To $tmp[0]
  289.                                                                 $tmp1 = _GUICtrlTreeView_AddChild($hTreeView, $hItem, $tmp[$i], 0, 0)
  290.                                                                 $search = FileFindFirstFile($PathCur & '\' & $tmp[$i] & '\*')
  291.                                                                 If $search <> -1 Then
  292.                                                                         While 1
  293.                                                                                 $file = FileFindNextFile($search)
  294.                                                                                 If @error Then ExitLoop
  295.                                                                                 If @extended Then
  296.                                                                                         _GUICtrlTreeView_SetChildren($hWndFrom, $tmp1) ; добавляем плюсик
  297.                                                                                         ExitLoop
  298.                                                                                 EndIf
  299.                                                                         WEnd
  300.                                                                 EndIf
  301.                                                                 $tmp1 = ''
  302.                                                                 FileClose($search)
  303.                                                         Next
  304.                                                         ; _GUICtrlTreeView_EndUpdate($hWndFrom)
  305.                                                 EndIf
  306.                                                 _GUICtrlStatusBar_SetText($hStatusBar, $PathCur)
  307.                                                 _GUICtrlStatusBar_SetTipText($hStatusBar, 0, $PathCur)
  308.                                                 _GUICtrlStatusBar_SetText($hStatusBar, $LngTmAs & ' ' & Round(TimerDiff($timer) / 1000, 2) & ' ' & $LngSec, 2)
  309.                                         Else
  310.                                                 Return
  311.                                         EndIf
  312.                                         GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE)
  313.                                         GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, 0, $LVSCW_AUTOSIZE_USEHEADER)
  314.                                         ; Case $TVN_SINGLEEXPAND
  315.                                         ; MsgBox(0, 'Message', '---')
  316.  
  317.                                         ; Case $NM_RCLICK
  318.                                         ; Local $tMPos = _WinAPI_GetMousePos(True, $hWndFrom), $tHit = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
  319.                                         ; Local $hItem = DllStructGetData($tHit, "Item")
  320.                                         ; If $hItem <> -1 And $hItem<>0x0 Then
  321.                                         ; MsgBox(0, 'Message', '---')
  322.                                         ; $x = MouseGetPos(0)
  323.                                         ; $y = MouseGetPos(1)
  324.                                         ; DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hGui, "ptr", 0)
  325.                                         ; Else
  326.                                         ; Return
  327.                                         ; EndIf
  328.                         EndSwitch
  329.                 Case $hListView
  330.                         Switch $iCode
  331.                                 Case $NM_DBLCLK
  332.                                         $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
  333.                                         $iItem = DllStructGetData($tInfo, 'Index')
  334.                                         If $iItem > -1 Then
  335.                                                 $tmp = $PathCur & '\' & _GUICtrlListView_GetItemText($hListView, $iItem)
  336.                                                 If FileExists($tmp) Then
  337.                                                         If _FO_IsDir($tmp) Then
  338.                                                                 $timer = TimerInit()
  339.                                                                 _Jump1($tmp)
  340.                                                                 $PathCur = $tmp
  341.                                                                 $timer = TimerInit()
  342.                                                                 _ListView_Update()
  343.  
  344.                                                                 GUICtrlSetData($Address, $PathCur)
  345.                                                                 _GUICtrlStatusBar_SetText($hStatusBar, $PathCur)
  346.                                                                 _GUICtrlStatusBar_SetTipText($hStatusBar, 0, $PathCur)
  347.                                                                 _GUICtrlStatusBar_SetText($hStatusBar, $LngTmAs & ' ' & Round(TimerDiff($timer) / 1000, 2) & ' ' & $LngSec, 2)
  348.                                                         Else
  349.                                                                 ShellExecute('"' & $tmp & '"')
  350.                                                         EndIf
  351.                                                 EndIf
  352.                                         EndIf
  353.                         EndSwitch
  354.         EndSwitch
  355.         $TrWM_NOTIFY = 0
  356.         Return $GUI_RUNDEFMSG
  357. EndFunc   ;==>WM_NOTIFY
  358.  
  359. Func _ListView_Update()
  360.         _GUICtrlListView_BeginUpdate($hListView)
  361.         _GUICtrlListView_DeleteAllItems($hListView)
  362.        
  363.         $tmp = _FileListToArray($PathCur, "*", 2)
  364.         If Not @error Then
  365.                 _AddItem($tmp, $PathCur, 1)
  366.         EndIf
  367.         $tmp = _FileListToArray($PathCur, "*", 1)
  368.         If Not @error Then
  369.                 _AddItem($tmp, $PathCur)
  370.         EndIf
  371.         _GUICtrlListView_EndUpdate($hListView)
  372. EndFunc   ;==>_ListView_Update
  373.  
  374. Func _AddItem(ByRef $aFileList, $sPath, $fld = 0)
  375.         Local $ext, $iExeNum = 0, $ind
  376.         For $i = 1 To $aFileList[0]
  377.                 If $fld Then
  378.                         _GUICtrlListView_AddItem($hListView, $aFileList[$i], 0)
  379.                 Else
  380.                         $ext = StringRegExpReplace($aFileList[$i], '.*\.(\S+)', '\1')
  381.                         If $ext = 'exe' Or $ext = 'ico' Then
  382.                                 $iExeNum += 1
  383.                                 If $iExeNum < 10 Then
  384.                                         _ReplaceIcon($g_hImgAssot, $sPath & '\' & $aFileList[$i], $iExeNum)
  385.                                         $ind = $iExeNum - 10
  386.                                 Else
  387.                                         $ind = 0
  388.                                 EndIf
  389.                         Else
  390.                                 $ind = _Get_Num_ICO($ext)
  391.                                 If @error Then $ind = 0
  392.                         EndIf
  393.                         _GUICtrlListView_AddItem($hListView, $aFileList[$i], $ind + 10)
  394.                 EndIf
  395.         Next
  396. EndFunc   ;==>_AddItem
  397.  
  398. Func _ReplaceIcon($hWnd, $sFile, $iIndex = 2)
  399.         Local $pIcon, $tIcon, $hIcon
  400.         $tIcon = DllStructCreate("int Icon")
  401.         $pIcon = DllStructGetPtr($tIcon)
  402.         _WinAPI_ExtractIconEx($sFile, 0, 0, $pIcon, 1) ; извлекает иконку из файла
  403.         $hIcon = DllStructGetData($tIcon, "Icon")
  404.         _GUIImageList_ReplaceIcon($hWnd, $iIndex, $hIcon) ; -1 означает добавление иконки в конец списка, вместо замены
  405.         _WinAPI_DestroyIcon($hIcon)
  406. EndFunc   ;==>_ReplaceIcon
  407.  
  408. Func _CreateItem($hWndFrom, $h, $Path)
  409.         $text = _GUICtrlTreeView_GetText($hWndFrom, $h)
  410.         $tmp = _FileListToArray($Path & '\' & $text, "*", 2)
  411.         If @error Then Return
  412.         For $i = 1 To $tmp[0]
  413.                 _GUICtrlTreeView_AddChild($hTreeView, $h, $tmp[$i], 0, 0)
  414.         Next
  415. EndFunc   ;==>_CreateItem
  416.  
  417. Func _GetPathItem($hTreeView, $hItem)
  418.         Local $sep = Opt("GUIDataSeparatorChar", "\")
  419.         Local $sPath = _GUICtrlTreeView_GetTree($hTreeView, $hItem)
  420.         Opt("GUIDataSeparatorChar", $sep)
  421.         Return $sPath
  422. EndFunc   ;==>_GetPathItem
  423.  
  424. Func _restart()
  425.         Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
  426.         Local $sRunLine, $sScript_Content, $hFile
  427.  
  428.         $sRunLine = @ScriptFullPath
  429.         If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
  430.         If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw
  431.  
  432.         $sScript_Content &= '#NoTrayIcon' & @CRLF & _
  433.                         'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
  434.                         '   Sleep(10)' & @CRLF & _
  435.                         'WEnd' & @CRLF & _
  436.                         'Run("' & $sRunLine & '")' & @CRLF & _
  437.                         'FileDelete(@ScriptFullPath)' & @CRLF
  438.  
  439.         $hFile = FileOpen($sAutoIt_File, 2)
  440.         FileWrite($hFile, $sScript_Content)
  441.         FileClose($hFile)
  442.  
  443.         Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
  444.         Sleep(1000)
  445.         Exit
  446. EndFunc   ;==>_restart
  447.  
  448. Func _FileDefaultIcon($sExt)
  449.         If $sExt = '' Or StringInStr($sExt, ':') Then Return SetError(1)
  450.  
  451.         Local $aCall = DllCall("shlwapi.dll", "int", "AssocQueryStringW", _
  452.                         "dword", 0x00000040, _ ;$ASSOCF_VERIFY
  453.                         "dword", 15, _ ;$ASSOCSTR_DEFAULTICON
  454.                         "wstr", $sExt, _
  455.                         "ptr", 0, _
  456.                         "wstr", "", _
  457.                         "dword*", 65536)
  458.  
  459.         If @error Then Return SetError(1, 0, "")
  460.  
  461.         If Not $aCall[0] Then
  462.                 $sExt = StringReplace($aCall[5], '"', '')
  463.                 $sExt = StringSplit($sExt, ',')
  464.                 Opt('ExpandEnvStrings', 1)
  465.                 $sExt[1] = $sExt[1]
  466.                 Opt('ExpandEnvStrings', 0)
  467.                 Return SetError(0, 0, $sExt)
  468.         ElseIf $aCall[0] = 0x80070002 Then
  469.                 Return SetError(1, 0, "{unknown}")
  470.         ElseIf $aCall[0] = 0x80004005 Then
  471.                 Return SetError(1, 0, "{fail}")
  472.         Else
  473.                 Return SetError(2, $aCall[0], "")
  474.         EndIf
  475.  
  476. EndFunc   ;==>_FileDefaultIcon
  477.  
  478. Func _ResizeField()
  479.         Local $aClientSize, $aCur_Info, $aID_Pos, $dX, $tmp
  480.         $aCur_Info = GUIGetCursorInfo($hGui)
  481.         If $aCur_Info[4] = $ReLbl Then
  482.                 $aID_Pos = ControlGetPos($hGui, '', $ReLbl)
  483.                 $aClientSize = WinGetClientSize($hGui)
  484.                 $aClientSize[1] -= 60
  485.  
  486.                 ; высчитываем разницу координат
  487.                 $dX = $aID_Pos[0] - $aCur_Info[0]
  488.                 While 1
  489.                         Sleep(10)
  490.                         $aCur_Info = GUIGetCursorInfo($hGui) ; получаем новую инфу
  491.                         $aCur_Info[0] += $dX
  492.                        
  493.                         If Not ($aCur_Info[0] < 60 Or $aClientSize[0] - $aCur_Info[0] < 60 Or $tmp = $aCur_Info[0]) Then
  494.                                 GUICtrlSetPos($ReLbl, $aCur_Info[0], 35) ; устанавливаем новые координаты
  495.                                 GUICtrlSetPos($iTreeView, 0, 35, $aCur_Info[0], $aClientSize[1])
  496.                                 GUICtrlSetPos($iListView, $aCur_Info[0] + 4, 35, $aClientSize[0] - $aCur_Info[0] - 4, $aClientSize[1])
  497.                                 $tmp = $aCur_Info[0]
  498.                         EndIf
  499.                         If Not $aCur_Info[2] Then ExitLoop ; выход если курсор отпущен
  500.                 WEnd
  501.         EndIf
  502. EndFunc   ;==>_ResizeField
  503.  
  504. Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
  505.         #forceref $iMsg, $wParam
  506.         If $hWnd = $hGui Then
  507.                 Local $tMINMAXINFO = DllStructCreate("int;int;" & _
  508.                                 "int MaxSizeX; int MaxSizeY;" & _
  509.                                 "int MaxPositionX;int MaxPositionY;" & _
  510.                                 "int MinTrackSizeX; int MinTrackSizeY;" & _
  511.                                 "int MaxTrackSizeX; int MaxTrackSizeY", _
  512.                                 $lParam)
  513.                 DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 350)
  514.                 DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 250)
  515.         EndIf
  516. EndFunc   ;==>WM_GETMINMAXINFO
  517.  
  518. Func _Get_Num_ICO($sExt)
  519.         ; Global $g_hImgAssot
  520.         ; Global $g_aExtAssot
  521.         Local $ind, $ico1
  522.         $ind = _ArraySearch2($g_aExtAssot, $sExt)
  523.         If @error Then
  524.                 $ico1 = _FileDefaultIcon('.' & $sExt)
  525.                 If Not @error Then
  526.                         Switch UBound($ico1)
  527.                                 Case 2
  528.                                         If _ArraySearch2($g_aExtBlack, $sExt) > 0 Then ; Если в чёрном списке, тогда ошибка
  529.                                                 Return SetError(1, 0, -1)
  530.                                         Else
  531.                                                 _GUIImageList_AddIcon($g_hImgAssot, $ico1[1], 0)
  532.                                                 If @error Then
  533.                                                         _ArrayAdd2($g_aExtBlack, $sExt) ; Если ошибка, то добавляем расширение в чёрный список
  534.                                                         Return SetError(1, 0, -1)
  535.                                                 EndIf
  536.                                         EndIf
  537.                                 Case 3
  538.                                         _GUIImageList_AddIcon($g_hImgAssot, $ico1[1], $ico1[2])
  539.                                         If @error Then
  540.                                                 _ArrayAdd2($g_aExtBlack, $sExt) ; Если ошибка, то добавляем расширение в чёрный список
  541.                                                 Return SetError(1, 0, -1)
  542.                                         EndIf
  543.                         EndSwitch
  544.                         _ArrayAdd2($g_aExtAssot, $sExt) ; Иначе добавляем расширение в белый список
  545.                         Return SetError(0, 0, $g_aExtAssot[0])
  546.                         ; MsgBox(4096, "Информация", "Количество изображений: " & _GUIImageList_GetImageCount($g_hImgAssot))
  547.                         ; $sText = ''
  548.                         ; For $i = 0 To $g_aExtAssot[0]
  549.                         ; $sText &= $g_aExtAssot[$i] & @LF
  550.                         ; Next
  551.                         ; MsgBox(0, 'Сообщение', $sText)
  552.                 EndIf
  553.         Else
  554.                 Return SetError(0, 0, $ind)
  555.         EndIf
  556. EndFunc   ;==>_Get_Num_ICO
  557.  
  558. Func _ArrayAdd2(ByRef $Array, $ext)
  559.         $Array[0] += 1
  560.         ReDim $Array[$Array[0] + 1]
  561.         $Array[$Array[0]] = $ext
  562. EndFunc   ;==>_ArrayAdd2
  563.  
  564. Func _ArraySearch2(ByRef $Array, $ext)
  565.         For $i = 1 To $Array[0]
  566.                 If $ext = $Array[$i] Then Return SetError(0, 0, $i)
  567.         Next
  568.         Return SetError(1, 0, -1)
  569. EndFunc   ;==>_ArraySearch2
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top