J'ai créer un explorer distant (qui à pas mal de bug) :s
Je POST la version "local" si sa peu aider... et si quelqu'un a le courage de rectifier les bugs:
- Quand on reliste un dossier les nouveaux dossier qui ont été créer entre l’ancien listage et le nouveau ne s'ajoute pas à la TreeView...
- J’avoue que je ne suis pas organisé, et que le script n'est pas ordonnée
- ATTENTION les double clics dans la listview ne marche que en 32 bits
- Quand un dossier contient beaucoup de fichier il est très long à charger (et à suppr. la ListView)
Malgré ça sa marche à peu près... ^^
Amélioration à apporter
- Trier les fichiers par nom, par taille...
- Afficher les nouveaux lecteur qui se connecte à la machine
- Suppr. les lecteurs qui se déconnecte de la machine
- ouverture de mes documents direct en sélectionnant dans la treeview l'icone "mes documents"
- ouverture du bureau direct en sélectionnant dans la treeview l'icone "bureau"
- Ajouter la fonction "rechercher"
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <String.au3>
#include <File.au3>
#include <EditConstants.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
SplashTextOn("Patientez...", "Chargement", 250, 50)
FileInstall("pdf.ico", @Tempdir&"\pdf.ico")
;bureau 34
;2 = txt, doc, docx, xlsx, xls, pdf (fichiers)
;224 = avi, mp4, mpeg, wmv, mkv (videos)
;225 = mp3, m4a, wma (musiques)
;? = png, jpeg (images)
;3 = exe
;289 = tout le reste
; 4 = Folder
Global $Directory_Actuel = ""
Global $Directory_Actuel_ID = ""
Global $fDblClk = False
Global $Old_Value_Select = ""
Global $_Array_TEMPO2
$Old_Clic = 0
$Timer_Explorer = 0
$_Array_TEMPO = 0
$_ComputerName_Explorer = @ComputerName
$_IP_Explorer = @IPAddress1 ; SocketToIP($_Socket_Explorer)
;GUISetState(@SW_DISABLE, $GUI_SERVEUR)
Opt("GUIResizeMode", $GUI_DOCKALL)
$Gui_Explorer = GUICreate("Explore Computer "&$_ComputerName_Explorer&" ("&$_IP_Explorer&")", 700, 400, -1, -1)
GUICtrlCreateButton("<", 170, 0, 40, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateButton(">", 210, 0, 40, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$Ex_input = GUICtrlCreateInput("", 250, 0, 300, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$Tree_1 = GUICtrlCreateTreeView(0, 0, 170, 400, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$MenuEx_input = GUICtrlCreateContextMenu($Tree_1)
GUICtrlCreateMenuItem("Bureau", $MenuEx_input)
GUICtrlCreateMenuItem("Mes documents", $MenuEx_input)
GUICtrlCreateMenuItem("Démarrage", $MenuEx_input)
GUICtrlCreateMenuItem("Disque principal", $MenuEx_input)
GUICtrlCreateMenuItem("WINDOWS", $MenuEx_input)
$ListView = GUICtrlCreateListView("Nom|Type|Taille", 170, 20, 530, 364)
_GUICtrlListView_SetColumn($ListView, 0, "Nom", 395)
$Lst_Handle = GUICtrlGetHandle(-1)
$Label_information = GUICtrlCreateLabel("", 170, 384, 429, 15, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL))
GUICtrlSetColor(-1, 0x808080)
$Value_General = 0
$Menu_ListView = GUICtrlCreateContextMenu($ListView)
$_MenuUploader = GUICtrlCreateMenuItem("Uploader", $Menu_ListView)
GUICtrlCreateMenuItem("", $Menu_ListView)
$_MenuNouveau = GUICtrlCreateMenu("Nouveau", $Menu_ListView)
GUICtrlCreateMenuItem("Dossier", $_MenuNouveau)
GUICtrlCreateMenuItem("", $_MenuNouveau)
$_Nouveau_TXT = GUICtrlCreateMenuItem("Document Texte", $_MenuNouveau)
GUICtrlCreateProgress(599, 384, 101, 16)
;GUICtrlCreateButton("Upload", 200-30, 380, 100, 20)
;GUICtrlCreateButton("Download", 300-30, 380, 100, 20)
;GUICtrlCreateButton("Exécuter", 600, 380, 100, 20)
$Poste_de_Travail = GUICtrlCreateTreeViewItem($_ComputerName_Explorer, $Tree_1)
GUICtrlSetImage($Poste_de_Travail, @SystemDir & "\shell32.dll", 16)
;TCPSend($_Socket_Explorer, "EXPLORER?")
;_WaitRecvReponseOnSocket($_Socket_Explorer)
;TCPSend($_Socket_Explorer, "PDT")
;$Drive = _WaitRecvReponseARRAYOnSocket($_Socket_Explorer)
;For $o = 1 To $Drive[0]
;GUICtrlCreateTreeViewItem($Drive[$o], $Poste_de_Travail)
;Next
$Drive = DriveGetDrive("all")
Dim $Array_TreeView[$Drive[0]+1][5]; Column0 = ID; Column1 = Link; Column3 = ID_Parent;
Dim $ArrayDrive[$Drive[0]+1+2][4]
$Array_TreeView[0][0] = $Drive[0]
$ArrayDrive[0][0] = $Drive[0]+2
$ArrayDrive[1][0] = GUICtrlCreateTreeViewItem("Bureau", $Poste_de_Travail)
$ArrayDrive[1][1] = @DesktopDir
$ArrayDrive[1][2] = "Bureau"
$ArrayDrive[1][3] = "Bureau"
_IconOnDrive($ArrayDrive[1][0], $ArrayDrive[1][2])
$ArrayDrive[2][0] = GUICtrlCreateTreeViewItem("Mes Documents", $Poste_de_Travail)
$ArrayDrive[2][1] = @MyDocumentsDir
$ArrayDrive[2][2] = "Mes Documents"
$ArrayDrive[2][3] = "Mes Documents"
_IconOnDrive($ArrayDrive[2][0], $ArrayDrive[2][2])
For $o = 1 to $Drive[0]
$DriveName = DriveGetLabel($Drive[$o])
$DriveType = DriveGetType($Drive[$o])
If $DriveName <> "" Then
$Array_TreeView[$o][0] = GUICtrlCreateTreeViewItem($DriveName & " ("&StringUpper($Drive[$o])&")", $Poste_de_Travail)
$ArrayDrive[$o+2][3] = $DriveName & " ("&StringUpper($Drive[$o])&")"
Else
$Array_TreeView[$o][0] = GUICtrlCreateTreeViewItem("("&StringUpper($Drive[$o])&")", $Poste_de_Travail)
$ArrayDrive[$o+2][3] = "("&StringUpper($Drive[$o])&")"
EndIf
_IconOnDrive($Array_TreeView[$o][0], $DriveType)
$Array_TreeView[$o][1] = StringUpper($Drive[$o])
$Array_TreeView[$o][2] = $Poste_de_Travail
$Array_TreeView[$o][3] = 0
$ArrayDrive[$o+2][0] = $Array_TreeView[$o][0]
$ArrayDrive[$o+2][1] = $Array_TreeView[$o][1]
$ArrayDrive[$o+2][2] = $DriveType
Next
GUICtrlCreateInput("Rechercher", 550, 0, 150, 20)
GUICtrlSetColor(-1, 0x808080)
GUISetState()
SplashOff()
GUIRegisterMsg($WM_NOTIFY, "WM_ListView_DoubleClick")
While 1
$MSG_GUI_Explorer = GUIGetMsg()
Switch $MSG_GUI_Explorer
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Poste_de_Travail
_GUICtrlListView_DeleteAllItems($ListView)
Dim $_Array_TEMPO[$ArrayDrive[0][0]+1][2]
$_Array_TEMPO[0][0] = $ArrayDrive[0][0]
For $l = 1 To $ArrayDrive[0][0]
$ID = GUICtrlCreateListViewItem($ArrayDrive[$l][3], $ListView)
_IconOnDrive($ID, $ArrayDrive[$l][2])
$_Array_TEMPO[$l-1][1] = $ArrayDrive[$l][0]
Next
GUICtrlSetData($Ex_input, $_ComputerName_Explorer)
EndSwitch
If $fDblClk = True Then
$fDblClk = False
Lst_ValuesClick()
EndIf
_VerifSelect_TreeView()
WEnd
;GUISetState(@SW_ENABLE, $GUI_SERVEUR)
;GUIDelete($Gui_Explorer)
Func WM_ListView_DoubleClick($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tNMHDR, 1) = $Lst_Handle Then
If DllStructGetData($tNMHDR, 3) = $NM_DBLCLK Then
$fDblClk = True
$Old_Value_Select = $MSG_GUI_Explorer
EndIf
EndIf
$tNMHDR = 0
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_ListView_DoubleClick
Func Lst_ValuesClick()
$SelIndex = _GUICtrlListView_GetSelectedIndices($ListView)
If $SelIndex <> "" Then
If $SelIndex > 0 or _GUICtrlListView_GetItemText($ListView, $SelIndex+0) <> ".." Then
If $_Array_TEMPO[$SelIndex][1] <> "" Then
_GUICtrlTreeView_SelectItem($Tree_1, $_Array_TEMPO[$SelIndex][1])
Else
$Text = _GUICtrlListView_GetItemText($ListView, $SelIndex+0)
$msg_Box = MsgBox(4, $Text, "Voulez-vous débuter le téléchargement du fichier ?")
If $msg_Box = 6 Then
MsgBox(0, "Téléchargement", "Lancement du téléchargement...")
EndIf
EndIf
Else
_GUICtrlTreeView_Expand($Tree_1, $Directory_Actuel_ID, False)
_GUICtrlTreeView_SelectItem($Tree_1, $_Array_TEMPO[0][2])
EndIf
EndIf
EndFunc
Func _VerifSelect_TreeView()
For $i = 1 to $Array_TreeView[0][0]
If $Array_TreeView[$i][0] = $MSG_GUI_Explorer Then
GUICtrlSetState($Tree_1, $GUI_DISABLE)
GUICtrlSetData($Label_information, "Patientez... Lecture du dossier en cour.")
If $_Array_TEMPO <> 0 Then
_GUICtrlListView_DeleteAllItems($ListView)
EndIf
$List_File = _Explore_DIR($Array_TreeView[$i][1])
If $List_File <> 0 Then
Dim $_Array_TEMPO[$List_File[0][0]+1][10]
$_Array_TEMPO[0][1] = GUICtrlCreateListViewItem("..", $ListView)
GUICtrlSetImage(-1, @SystemDir & "\shell32.dll", 4)
$_Array_TEMPO[0][2] = $Array_TreeView[$i][2]
Dim $_Array_TEMPO2[$List_File[0][0]+1][2]
$_Array_TEMPO[0][0] = $List_File[0][0]
For $m = 1 to $List_File[0][0]
$Size_Final = $List_File[$m][2]
$octet = "octets"
If $Size_Final > 1024 Then
$Size_Final = $Size_Final/1024
$octet = "Ko"
EndIf
If $Size_Final > 1024 Then
$Size_Final = $Size_Final/1024
$octet = "Mo"
EndIf
If $Size_Final > 1024 Then
$Size_Final = $Size_Final/1024
$octet = "Go"
EndIf
If $Size_Final > 1024 Then
$Size_Final = $Size_Final/1024
$octet = "To"
EndIf
For $p = 1 to StringLen($List_File[$m][1])
If StringTrimLeft(StringLeft($List_File[$m][1], $p), $p-1) = "D" Then
$Value_verif = 1
ExitLoop
Else
$Value_verif = 0
EndIf
Next
If $Value_verif Then
$_Array_TEMPO[$m][0] = GUICtrlCreateListViewItem($List_File[$m][0]&"|"&$List_File[$m][1], $ListView)
GUICtrlSetImage($_Array_TEMPO[$m][0], @SystemDir & "\shell32.dll", 4)
If $Array_TreeView[$i][3] = 0 Then
$Number_value_TreeView = UBound($Array_TreeView)
ReDim $Array_TreeView[$Number_value_TreeView+1][5]
$Array_TreeView[$Number_value_TreeView][0] = GUICtrlCreateTreeViewItem($List_File[$m][0], $Array_TreeView[$i][0]); <// voir plutar
$Array_TreeView[$Number_value_TreeView][1] = $Array_TreeView[$i][1]&"\"&$List_File[$m][0]
$Array_TreeView[$Number_value_TreeView][2] = $Array_TreeView[$i][0]
$Array_TreeView[$Number_value_TreeView][3] = 0
$_Array_TEMPO[$m][1] = $Array_TreeView[$Number_value_TreeView][0]
$_Array_TEMPO2[$m][0] = $List_File[$m][0]
$_Array_TEMPO2[$m][1] = $Array_TreeView[$Number_value_TreeView][0]
$Array_TreeView[0][0] = $Number_value_TreeView
GUICtrlSetImage($Array_TreeView[$Number_value_TreeView][0], @SystemDir & "\shell32.dll", 4)
$Value_Gene = 0
Else
$Array_test = $Array_TreeView[$i][4]
$Value_Gene = 1
For $e = 1 to UBound($Array_test)-1
If $Array_test[$e][0] = $List_File[$m][0] Then
$_Array_TEMPO[$m][1] = $Array_test[$e][1]
ExitLoop
EndIf
Next
EndIf
;_ArrayDisplay($_Array_TEMPO2)
; Column0 = ID; Column1 = Link; Column3 = ID_Parent;
Else
$_Array_TEMPO[$m][0] = GUICtrlCreateListViewItem($List_File[$m][0]&"|"&$List_File[$m][1]&"|"&Round($Size_Final, 2)&" "&$octet, $ListView)
$_Array_TEMPO[$m][1] = 0
$_Array_TEMPO[$m][2] = $Array_TreeView[$i][1]&"\"&$List_File[$m][0]
$_Array_TEMPO[$m][3] = GUICtrlCreateContextMenu($_Array_TEMPO[$m][0])
$_Array_TEMPO[$m][4] = GUICtrlCreateMenuItem("Télécharger", $_Array_TEMPO[$m][3])
GUICtrlCreateMenuItem("", $_Array_TEMPO[$m][3])
$_Array_TEMPO[$m][5] = GUICtrlCreateMenuItem("Copier", $_Array_TEMPO[$m][3])
$_Array_TEMPO[$m][6] = GUICtrlCreateMenuItem("Coller", $_Array_TEMPO[$m][3])
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateMenuItem("", $_Array_TEMPO[$m][3])
$_Array_TEMPO[$m][7] = GUICtrlCreateMenuItem("Exécuter", $_Array_TEMPO[$m][3])
$_Array_TEMPO[$m][8] = GUICtrlCreateMenuItem("Supprimer", $_Array_TEMPO[$m][3])
$_Array_TEMPO[$m][9] = GUICtrlCreateMenuItem("Renommer", $_Array_TEMPO[$m][3])
$Num_Lettre = StringLen($List_File[$m][0])
For $p = 1 to $Num_Lettre
If StringLeft(StringRight($List_File[$m][0], $p), 1) = "." Then
$Extension = StringRight($List_File[$m][0], $p)
ExitLoop
Else
$Extension = "nonvalue"
EndIf
Next
If $Extension = ".docx" Then $Extension = ".doc"
GUICtrlSetImage($_Array_TEMPO[$m][0], @SystemDir & "\shell32.dll", 289)
$Reg = RegRead("HKEY_CLASSES_ROOT\" & $Extension , "")
If not @error Then
$ValeurReg = RegRead("HKEY_CLASSES_ROOT\" & $Reg & "\DefaultIcon", "")
$String_Cut = StringSplit($ValeurReg, ",")
If $String_Cut[0] = 1 Then
GUICtrlSetImage($_Array_TEMPO[$m][0], StringReplace(StringReplace($ValeurReg, '"', ""), "'", ""))
Else
GUICtrlSetImage($_Array_TEMPO[$m][0], StringReplace(StringReplace($String_Cut[1], '"', ""), "'", ""), StringReplace($String_Cut[2], "-", ""))
EndIf
Switch $Extension
Case ".exe"
GUICtrlSetImage($_Array_TEMPO[$m][0], @SystemDir & "\shell32.dll", 3)
Case ".bmp"
$ValeurReg = RegRead("HKEY_CLASSES_ROOT\" & RegRead("HKEY_CLASSES_ROOT\.jpg" , "") & "\DefaultIcon", "")
$String_Cut = StringSplit($ValeurReg, ",")
If $String_Cut[0] = 1 Then
GUICtrlSetImage($_Array_TEMPO[$m][0], StringReplace(StringReplace($ValeurReg, '"', ""), "'", ""))
Else
GUICtrlSetImage($_Array_TEMPO[$m][0], StringReplace(StringReplace($String_Cut[1], '"', ""), "'", ""), StringReplace($String_Cut[2], "-", ""))
EndIf
Case ".pdf"
GUICtrlSetImage($_Array_TEMPO[$m][0], @TempDir&"\pdf.ico")
EndSwitch
Else
GUICtrlSetImage($_Array_TEMPO[$m][0], @SystemDir & "\shell32.dll", 289)
EndIf
;2 = txt, doc, docx, xlsx, xls, pdf (fichiers)
;224 = avi, mp4, mpeg, wmv, mkv (videos)
;225 = mp3, m4a, wma (musiques)
;? = png, jpeg (images)
;3 = exe
;4 = Folder
;289 = tout le reste
EndIf
;_ArrayDisplay($Array_TreeView)
Next
If $Array_TreeView[$i][4] = "" Then
$Array_TreeView[$i][4] = $_Array_TEMPO2
EndIf
If $List_File[0][0] > 1 Then
GUICtrlSetData($Label_information, "Il y a "&$List_File[0][0]&" éléments dans ce dossier.")
Else
GUICtrlSetData($Label_information, "Il y a "&$List_File[0][0]&" élément dans ce dossier.")
EndIf
Else
Dim $_Array_TEMPO[1][10]
$_Array_TEMPO[0][1] = GUICtrlCreateListViewItem("..", $ListView)
GUICtrlSetImage(-1, @SystemDir & "\shell32.dll", 4)
$_Array_TEMPO[0][2] = $Array_TreeView[$i][2]
GUICtrlSetData($Label_information, "Il y a 0 élément dans ce dossier.")
EndIf
$Directory_Actuel = $Array_TreeView[$i][1]&"\"
$Directory_Actuel_ID = $Array_TreeView[$i][0]
GUICtrlSetData($Ex_input, $Directory_Actuel)
GUICtrlSetState($Tree_1, $GUI_ENABLE)
$Array_TreeView[$i][3] = 1
EndIf
Next
EndFunc
Func _Explore_DIR($DIR_SELECT)
$File = _FileListToArray($DIR_SELECT)
If $File <> 0 Then
Dim $New_File[$File[0]+1][3]
$New_File[0][0] = $File[0]
For $o = 1 to $File[0]
$New_File[$o][0] = $File[$o]
$New_File[$o][1] = FileGetAttrib($DIR_SELECT&"\"&$File[$o])
$New_File[$o][2] = FileGetSize($DIR_SELECT&"\"&$File[$o])
Next
Return $New_File
Else
Return 0
EndIf
EndFunc
Func _IconOnDrive($ID, $DriveType)
;$hImage = _GUIImageList_Create(16, 16, 5, 3)
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 15) ; 16 = Poste de travail
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 6) ; 7 = Removable (Floppy)
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 8) ; 9 = Drive
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 3) ; 4 = Folder closed
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 7) ; 8 = Amovible
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 4) ; 4 = Folder open
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 11) ; 12 = CDROM
;_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 9) ; 10 = Networkdrive connected
; _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 10) ; 11 =Networkdrive disconnected
Switch $DriveType
Case "Mes Documents"
GUICtrlSetImage($ID, "mesdoc.ico")
Case "Bureau"
GUICtrlSetImage($ID, "bureau.ico")
Case "Network"
GUICtrlSetImage($ID, @SystemDir & "\shell32.dll", 10)
Case "Removable"
GUICtrlSetImage($ID, @SystemDir & "\shell32.dll", 7)
Case "Fixed"
GUICtrlSetImage($ID, @SystemDir & "\shell32.dll", 9)
Case "CDROM"
GUICtrlSetImage($ID, @SystemDir & "\shell32.dll", 12)
EndSwitch
EndFunc


