Advertisement
AZJIO

експлорер

Sep 11th, 2011
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 12.63 KB | None | 0 0
  1. #include <GUIConstantsEx.au3>
  2. #include <GuiTreeView.au3>
  3. #include <WindowsConstants.au3>
  4. #include <GuiImageList.au3>
  5. #Include <File.au3>
  6. #include <GuiListView.au3>
  7. #Include <Array.au3> ; тест
  8.  
  9. Opt("GUIOnEventMode", 1)
  10.  
  11. Global $PathCur
  12.  
  13. $Gui=GUICreate('Файловый менеджер', 640, 560)
  14. GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
  15. $StatusBar = GUICtrlCreateLabel('', 5, 560-18, 640-10, 17)
  16.  
  17. $restart = GUICtrlCreateButton("R", 640-20, 2, 18, 20)
  18. ; GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)
  19. GUICtrlSetOnEvent(-1, "_restart")
  20.  
  21. $Address = GUICtrlCreateInput('', 5, 6, 570, 24)
  22. $restart = GUICtrlCreateButton(">", 577, 6, 24, 24)
  23. GUICtrlSetOnEvent(-1, "_Jump")
  24.  
  25. $TreeView = GUICtrlCreateTreeView(0, 35, 216, 500)
  26. ; GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
  27. $hTreeView = GUICtrlGetHandle($TreeView)
  28.  
  29.  
  30. $hImage = _GUIImageList_Create(16, 16, 5)
  31. _GUIImageList_AddIcon($hImage, @SystemDir&'\shell32.dll', -4)
  32. _GUIImageList_AddIcon($hImage, @SystemDir&'\shell32.dll', -5)
  33. _GUIImageList_AddIcon($hImage, @SystemDir&'\shell32.dll', 0)
  34. _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)
  35.  
  36.  
  37. $E=''
  38. $i=1
  39. While 1
  40.     $i+=1
  41.     $sExt = RegEnumKey("HKCR", $i)
  42.     If @error Or StringLeft($sExt, 1)<>'.' then ExitLoop
  43.     $ico1=_FileDefaultIcon($sExt)
  44.     If Not @error Then
  45.         Switch UBound($ico1)
  46.             Case 2
  47.                 If StringInStr(';.exe;.scr;.ico;.ani;.cur;', ';'&$sExt&';') Then
  48.                     ContinueLoop
  49.                 Else
  50.                     _GUIImageList_AddIcon($hImage, $ico1[1], 0)
  51.                     If @error Then ContinueLoop
  52.                 EndIf
  53.             Case 3
  54.                 _GUIImageList_AddIcon($hImage, $ico1[1], $ico1[2])
  55.                 If @error Then ContinueLoop
  56.         EndSwitch
  57.         $E&='|'&$sExt
  58.     EndIf
  59. WEnd
  60. $E=StringTrimLeft($E, 1)
  61. $aE=StringSplit($E, '|')
  62.  
  63. ; $hImage = _GUIImageList_Create(16, 16, 5, 3)
  64. ; _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
  65. ; _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 0)
  66. ; _GUICtrlListView_SetImageList($hListView, $hImage, 1)
  67.  
  68. $DrivesArr = DriveGetDrive( "all" )
  69. For $i = 1 to $DrivesArr[0]
  70.     If $DrivesArr[$i]='a:' Or DriveGetType( $DrivesArr[$i]&'\' )='CDROM' Then ContinueLoop
  71.     $hTmp = _GUICtrlTreeView_Add($hTreeView, 0, StringUpper($DrivesArr[$i]), 0, 0)
  72.     ; $tmp=_FolderSearch($DrivesArr[$i], '*', 0, 0)
  73.     $tmp=_FileListToArray($DrivesArr[$i], "*", 2)
  74.     For $j = 1 to $tmp[0]
  75.         _GUICtrlTreeView_AddChild($hTreeView, $hTmp, $tmp[$j], 0, 0)
  76.     Next
  77. Next
  78.  
  79. ; перейти к нужной папке
  80. ; $StartPath='C:\AutoIt3\Notepad++'
  81. ; $aStartPath=StringSplit($StartPath, '\')
  82. ; For $i = 2 to $aStartPath[0]
  83.     ; _GUICtrlTreeView_FindItem($hTreeView, $sText)
  84. ; Next
  85.  
  86. ; $StartPath='C:\AutoIt3\Notepad++'
  87. ; $aStartPath=StringSplit($StartPath, '\')
  88. ; For $i = 2 to $aStartPath[0]
  89.     ; $aStartPath[1]&='\'&$aStartPath[$i]
  90.     ; $hTmp = _GUICtrlTreeView_AddChild($hTreeView, $aStartPath[$i], $aStartPath[$i], 0, 0)
  91.     ; $tmp=_FolderSearch($aStartPath[1], '*', 0, 0)
  92.     ; For $j = 1 to $tmp[0]
  93.         ; _GUICtrlTreeView_AddChild($hTreeView, $hTmp, $tmp[$j], 0, 0)
  94.     ; Next
  95. ; Next
  96.  
  97. ; $FolderList=_FolderSearch($StartPath, '*', 0, 0)
  98. ; For $i = 1 to $FolderList[0]
  99.     ; $hTmp = _GUICtrlTreeView_AddChild($hTreeView, $disk, $FolderList[$i], 0, 0)
  100.     ; $tmp=_FolderSearch($StartPath&'\'&$FolderList[$i], '*', 0, 0)
  101.     ; For $j = 1 to $tmp[0]
  102.         ; _GUICtrlTreeView_AddChild($hTreeView, $hTmp, $tmp[$j], 0, 0)
  103.     ; Next
  104. ; Next
  105.  
  106.  
  107. $ListView = GUICtrlCreateListView(' ', 220, 35, 420, 500, $LVS_NOCOLUMNHEADER +$LVS_SHOWSELALWAYS, $LVS_OWNERDRAWFIXED)
  108. GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
  109. GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_TRACKSELECT, $LVS_EX_TRACKSELECT)
  110. GUICtrlSetBkColor(-1, 0xf0f0f0) ; 0xE0DFE3
  111. ; GUICtrlSetResizing(-1, 6 + 32 + 64)
  112. $hListView = GUICtrlGetHandle($ListView)
  113. _GUICtrlListView_SetColumnWidth($ListView, 0, 390)
  114. _GUICtrlListView_SetImageList($hListView, $hImage, 1)
  115.  
  116. ; GUICtrlSetOnEvent(-1, "_OpenExplorer")
  117. ; $Label1=GUICtrlCreateLabel('StatusBar', 5, 260-20, 150, 17)
  118. GUISetState ()
  119. GUIRegisterMsg(0x004E, 'WM_NOTIFY')
  120.  
  121.  
  122.  
  123. While 1
  124.     Sleep(100000)
  125. WEnd
  126.  
  127. Func _Exit()
  128.     Exit
  129. EndFunc
  130.  
  131. Func _Jump()
  132.     $Address0=GUICtrlRead($Address)
  133.     If FileExists($Address0) Then
  134.         ; $Address0=StringReplace($Address0, '\', '|')
  135.         $aAdrs=StringSplit($Address0, '\')
  136.  
  137.             $tmp=_GUICtrlTreeView_GetFirstItem($hTreeView)
  138.             If _GUICtrlTreeView_GetText($hTreeView, $tmp)=$aAdrs[1] Then
  139.                 ; _GUICtrlTreeView_ExpandedOnce($hTreeView, $tmp)
  140.                 ; ControlTreeView ($Gui, "", $hTreeView, "Expand", $aAdrs[1])
  141.                  _GUICtrlTreeView_SetSelected($hTreeView, $tmp)
  142.                   _GUICtrlTreeView_ClickItem($hTreeView, $tmp, 'left', False, 2)
  143.                 MsgBox(0, '1 - '&$tmp, $aAdrs[1])
  144.             Else
  145.                 While 1
  146.                     $tmp=_GUICtrlTreeView_GetNext($hTreeView, $tmp)
  147.                     If _GUICtrlTreeView_GetText($hTreeView, $tmp)=$aAdrs[1] Then
  148.                         ; _GUICtrlTreeView_ExpandedOnce($hTreeView, $tmp)
  149.                         ; ControlTreeView ($Gui, "", $hTreeView, "Expand", $aAdrs[1])
  150.                          _GUICtrlTreeView_SetSelected($hTreeView, $tmp)
  151.                          _GUICtrlTreeView_ClickItem($hTreeView, $tmp, 'left', False, 2)
  152.                         MsgBox(0, '2 - '&$tmp, $aAdrs[1])
  153.                         ExitLoop
  154.                     EndIf
  155.                 WEnd
  156.             EndIf
  157.         If $aAdrs[0]>1 Then
  158.                             For $i = 2 to $aAdrs[0]
  159.                            
  160.                                 _GUICtrlTreeView_GetFirstChild($hTreeView, $tmp)
  161.                                 MsgBox(0, '11 - '&$tmp&' - '&$i, _GUICtrlTreeView_GetText($hTreeView, $tmp))
  162.                                 If _GUICtrlTreeView_GetText($hTreeView, $tmp)=$aAdrs[$i] Then
  163.                                     ; _GUICtrlTreeView_ExpandedOnce($hTreeView, $tmp)
  164.                                     ; ControlTreeView ($Gui, "", $hTreeView, "Expand", $aAdrs[$i])
  165.                                      _GUICtrlTreeView_SetSelected($hTreeView, $tmp)
  166.                                       _GUICtrlTreeView_ClickItem($hTreeView, $tmp, 'left', False, 2)
  167.                                     MsgBox(0, '3 - '&$tmp&' - '&$i, $aAdrs[$i])
  168.                                 Else
  169.                                     While 1
  170.                                         $tmp=_GUICtrlTreeView_GetNextChild($hTreeView, $tmp)
  171.                                 MsgBox(0, '22 - '&$tmp&' - '&$i, _GUICtrlTreeView_GetText($hTreeView, $tmp))
  172.                                         If _GUICtrlTreeView_GetText($hTreeView, $tmp)=$aAdrs[$i] Then
  173.                                             ; _GUICtrlTreeView_ExpandedOnce($hTreeView, $tmp)
  174.                                             ; ControlTreeView ($Gui, "", $hTreeView, "Expand", $aAdrs[$i])
  175.                                              _GUICtrlTreeView_SetSelected($hTreeView, $tmp)
  176.                                               _GUICtrlTreeView_ClickItem($hTreeView, $tmp, 'left', False, 2)
  177.                                             MsgBox(0, '4 - '&$tmp&' - '&$i, $aAdrs[$i])
  178.                                             ExitLoop
  179.                                         EndIf
  180.                                     WEnd
  181.                                 EndIf
  182.  
  183.                             Next
  184.         EndIf
  185.     EndIf
  186. EndFunc
  187.  
  188. Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
  189.     Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tmp
  190.  
  191.     $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
  192.     $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
  193.     $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
  194.     $iCode = DllStructGetData($tNMHDR, "Code")
  195.     Switch $hWndFrom
  196.         Case $hTreeView
  197.             Switch $iCode
  198.                 Case $NM_CLICK
  199.                     ; получение хэндла кликнутого пункта и поиск его в массиве
  200.                     Local $tMPos = _WinAPI_GetMousePos(True, $hWndFrom), $tHit = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
  201.                     Local $hItem = DllStructGetData($tHit, "Item")
  202.                     If $hItem <> -1 And $hItem<>0x0 Then
  203.                         ; _GetPathItem($hWndFrom, $hItem)
  204.                         $tmp=_GetPathItem($hWndFrom, $hItem)
  205.                         If $PathCur=$tmp Then
  206.                             Return
  207.                         Else
  208.                             $PathCur=$tmp
  209.                         EndIf
  210.                         GUICtrlSetData($StatusBar, $PathCur)
  211.                         GUICtrlSetData($Address, $PathCur)
  212.                        
  213.                         _GUICtrlListView_BeginUpdate($hListView)
  214.                         _GUICtrlListView_DeleteAllItems($hListView)
  215.                         $tmp=_FileListToArray($PathCur, "*", 2)
  216.                         If Not @error Then
  217.                             For $i = 1 to $tmp[0]
  218.                                 ; GUICtrlCreateListViewItem($tmp[$i],$ListView)
  219.                                 _GUICtrlListView_AddItem($hListView, $tmp[$i], 0)
  220.                             Next
  221.                         EndIf
  222.                         $tmp=_FileListToArray($PathCur, "*", 1)
  223.                         If Not @error Then
  224.                             For $i = 1 to $tmp[0]
  225.                                 ; GUICtrlCreateListViewItem($tmp[$i],$ListView)
  226.                                 $tmp3=StringRegExpReplace($tmp[$i], '.*(\.\S+)', '\1')
  227.                                 $ind=_ArraySearch($aE, $tmp3)
  228.                                 If @error Then $ind=0
  229.                                 _GUICtrlListView_AddItem($hListView, $tmp[$i], $ind+2)
  230.                             Next
  231.                         EndIf
  232.                         _GUICtrlListView_EndUpdate($hListView)
  233.                        
  234.                         ; _GUICtrlTreeView_BeginUpdate($hWndFrom)
  235.                         $KolChild=_GUICtrlTreeView_GetChildCount($hWndFrom, $hItem)
  236.                         If $KolChild<=0 Then Return
  237.  
  238.                         ; $Expan=_GUICtrlTreeView_GetExpanded($hWndFrom, $hItem) ; иконка закрытия и открытия папки
  239.                         ; $Expan=_GUICtrlTreeView_GetImageIndex($hWndFrom, $hItem)
  240.                         ; If $Expan=1 Then
  241.                             ; _GUICtrlTreeView_SetImageIndex($hWndFrom, $hItem, 0)
  242.                         ; Else
  243.                             ; _GUICtrlTreeView_SetImageIndex($hWndFrom, $hItem, 1)
  244.                         ; EndIf
  245.                        
  246.                         $h=_GUICtrlTreeView_GetFirstChild($hWndFrom, $hItem)
  247.                         $KolH=_GUICtrlTreeView_GetChildCount($hWndFrom, $h)
  248.                         If $KolH>0 Then Return
  249.                         _CreateItem($hWndFrom, $h, $PathCur)
  250.                         ; $text=_GUICtrlTreeView_GetText($hWndFrom, $h)
  251.                        
  252.                         For $i = 1 to $KolChild-1
  253.                             $h=_GUICtrlTreeView_GetNextChild($hWndFrom, $h)
  254.                             $KolH=_GUICtrlTreeView_GetChildCount($hWndFrom, $h)
  255.                             If $KolH>0 Then Return
  256.                             _CreateItem($hWndFrom, $h, $PathCur)
  257.                         Next
  258.                     Else
  259.                         Return
  260.                     EndIf
  261.                     ; _GUICtrlTreeView_EndUpdate($hWndFrom)
  262.                     ; GUICtrlListView_SetColumnWidth($ListView, 0, $LVSCW_AUTOSIZE)
  263.                     ; Case $TVN_SINGLEEXPAND
  264.                     ; MsgBox(0, 'Message', '---')
  265.                 Case $NM_RCLICK
  266.                     Local $tMPos = _WinAPI_GetMousePos(True, $hWndFrom), $tHit = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
  267.                     Local $hItem = DllStructGetData($tHit, "Item")
  268.                     If $hItem <> -1 And $hItem<>0x0 Then
  269.                         ; MsgBox(0, 'Message', '---')
  270.                         ; $x = MouseGetPos(0)
  271.                         ; $y = MouseGetPos(1)
  272.                         ; DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $Gui, "ptr", 0)
  273.                     Else
  274.                         Return
  275.                     EndIf
  276.             EndSwitch
  277.         Case $hListView
  278.             Switch $iCode
  279.                 Case $NM_DBLCLK
  280.                     $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
  281.                     $iItem = DllStructGetData($tInfo, 'Index')
  282.                     If $iItem > -1 Then
  283.                         $tmp = $PathCur&'\'&_GUICtrlListView_GetItemText($hListView, $iItem)
  284.                         If FileExists($tmp) Then ShellExecute('"'&$tmp&'"')
  285.                     EndIf
  286.             EndSwitch
  287.     EndSwitch
  288.     Return $GUI_RUNDEFMSG
  289. EndFunc
  290.  
  291. Func _CreateItem($hWndFrom, $h, $Path)
  292.     $text=_GUICtrlTreeView_GetText($hWndFrom, $h)
  293.     $tmp=_FileListToArray($Path&'\'&$text, "*", 2)
  294.     If @error Then Return
  295.     For $i = 1 to $tmp[0]
  296.         _GUICtrlTreeView_AddChild($hTreeView, $h, $tmp[$i], 0, 0)
  297.     Next
  298. EndFunc
  299.  
  300. Func _GetPathItem($hWndFrom, $hItem)
  301.     Local $Path=_GUICtrlTreeView_GetText($hWndFrom, $hItem), $text, $Path
  302.     While 1
  303.         $hItem=_GUICtrlTreeView_GetParentHandle($hWndFrom, $hItem)
  304.         If $hItem = 0 Then ExitLoop
  305.         $text=_GUICtrlTreeView_GetText($hWndFrom, $hItem)
  306.         $Path=$text&'\'&$Path
  307.     WEnd
  308.     Return $Path
  309. EndFunc
  310.  
  311. Func _restart()
  312.     Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
  313.     Local $sRunLine, $sScript_Content, $hFile
  314.  
  315.     $sRunLine = @ScriptFullPath
  316.     If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
  317.     If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw
  318.  
  319.     $sScript_Content &= '#NoTrayIcon' & @CRLF & _
  320.             'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
  321.             '   Sleep(10)' & @CRLF & _
  322.             'WEnd' & @CRLF & _
  323.             'Run("' & $sRunLine & '")' & @CRLF & _
  324.             'FileDelete(@ScriptFullPath)' & @CRLF
  325.  
  326.     $hFile = FileOpen($sAutoIt_File, 2)
  327.     FileWrite($hFile, $sScript_Content)
  328.     FileClose($hFile)
  329.  
  330.     Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
  331.     Sleep(1000)
  332.     Exit
  333. EndFunc   ;==>_restart
  334.  
  335. Func _FileDefaultIcon($sExt)
  336.     If $sExt = '' Or StringInStr($sExt, ':') Then Return SetError(1)
  337.  
  338.     Local $aCall = DllCall("shlwapi.dll", "int", "AssocQueryStringW", _
  339.             "dword", 0x00000040, _ ;$ASSOCF_VERIFY
  340.             "dword", 15, _ ;$ASSOCSTR_DEFAULTICON
  341.             "wstr", $sExt, _
  342.             "ptr", 0, _
  343.             "wstr", "", _
  344.             "dword*", 65536)
  345.  
  346.     If @error Then Return SetError(1, 0, "")
  347.  
  348.     If Not $aCall[0] Then
  349.         $sExt=StringReplace($aCall[5], '"', '')
  350.         $sExt=StringSplit($sExt, ',')
  351.         Opt('ExpandEnvStrings', 1)
  352.         $sExt[1]=$sExt[1]
  353.         Opt('ExpandEnvStrings', 0)
  354.         Return SetError(0, 0, $sExt)
  355.     ElseIf $aCall[0] = 0x80070002 Then
  356.         Return SetError(1, 0, "{unknown}")
  357.     ElseIf $aCall[0] = 0x80004005 Then
  358.         Return SetError(1, 0, "{fail}")
  359.     Else
  360.         Return SetError(2, $aCall[0], "")
  361.     EndIf
  362.  
  363. EndFunc  ;==>_FileAssociation
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement