Advertisement
AZJIO

Эксплорер+FTP

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