Posez votre question »

[VB] Remplir un TreeView avec les disques du PC

Avril 2015

Voici une routine qui permet de remplir un TreeView avec les disques du système et les répertoires qu'ils contiennent.

Descriptif


Le problème a été de trouver les clés des nodes, il arrivait toujours qu'une clé était éditée en double, puis j'ai trouvé la parade : comme clé, j'ai mis le chemin complet du répertoire et de cette façon, il est certain qu'il n'y aura pas de doublons.
Je n'ai pas été à même de tester les disques réseaux vu que je n'ai pas de réseau ; à vous de contrôler si vous en avez la possibilité.
J'ai éliminé les répertoires système, mon but étant de faire un explorateur d'images (disponible au téléchargement).
La routine est récursive et est relativement courte.

Ne vous étonnez pas du temps qu'il faut (ça dépend de votre système) mais la routine va pratiquement aussi vite que l'explorateur de Windows sauf qu'elle ne travaille pas à l'initialisation du PC. Pour comparer, voyez le temps que met Windows pour initialiser un disque externe ou une clé.

Vous pouvez télécharger le projet d'un explorateur d'images complet en VB6.

Quand vous cliquez sur une image, le message affiche le N° et le chemin complet de l'image, à vous d'en faire ce que vous voulez.
Vous pouvez aussi modifier les filtres pour permettre l'affichage d'autre images.

Le projet contient un OCX et une DLL perso, vous devez donc :
  • Dézippez le répertoire.
  • Ne cliquez pas sur le projet, naviguez jusque sur l'icône de VB6, clic droit sur l'icône et ouvrir en tant qu'administrateur.
  • À l'ouverture, cliquez sur 'Existant' et ouvrez le projet LN_Explorateur.vpb (note : ce n'est nécessaire que la première fois, ensuite ça fonctionne normalement).
  • Modifier la largeur de la TreeView en déplaçant la ligne rouge (clic sur la ligne et déplacer).
  • Modifier la grandeur des miniatures avec le bouton 'S'.


L'affichage des images est réalisée avec la dll Gdi+ réduite à sa plus simple expression.

Je pense que la routine peut-être facilement transposable en VB.Net

Le Code de la routine


Option Explicit  

Sub Initialise_TreeDir(TreeDir As TreeView)  
Dim ExpDr, Rep, Drv, S As String, N, D, a, r, Unite  
Dim Cle As String, sCle As String, Num As Integer, Sr As Integer  
Dim nodX As Node  
    Num = 64  
    Set ExpDr = CreateObject("Scripting.FileSystemObject")  
    Set Drv = ExpDr.Drives  
    For Each D In Drv  
        S = D.DriveLetter '& ":"  
        If D.DriveType = 3 Then 'réseaux  
            N = D.ShareName  
        ElseIf D.DriveType = 1 Then  'DD externe  
            N = " - Média amovible - (" & D.VolumeName & ")"  
            Incr Num: Cle = S  
            S = S & ":\"  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 6)  
            AjoutRep S, Cle, TreeDir  
        ElseIf D.DriveType = 2 Then  'DD  
            N = D.VolumeName  
            Incr Num: Cle = S  
            S = S & ":\"  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & " - (" & N & ")", 2)  
            AjoutRep S, Cle, TreeDir  
        ElseIf D.DriveType = 4 Then 'DVD  
            On Error Resume Next  
            N = D.VolumeName  
            If Err = 71 Then  
                N = "Lecteur DVD - (vide) "  
            Else  
                N = "Lecteur DVD - (" & N & ")"  
            End If  
            Incr Num: Cle = Chr(Num) & "0"  
            S = S & ":\ - "  
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 3)  
        Else  
            Stop  
        End If  
        S = ""  
        D = ""  
    Next  
    Set nodX = Nothing  
    Set ExpDr = Nothing  
    Set Drv = Nothing  

End Sub  

Sub AjoutRep(Chem As String, Cle As String, TreeDir As TreeView)  
Dim Rep, sRp, Obj, sRep, sR2  
Dim sCle As String, Num As Integer, Sr As Integer  
Dim nodX As Node  
Dim NbsR As Integer, S As String  
Sr = 9  
    Chem = Chem & IIf(Right(Chem, 1) = "\", "", "\")  
    Set Obj = CreateObject("Scripting.FileSystemObject")  
    Set Rep = Obj.Getfolder(Chem)  
    If Left(Rep.Name, 1) = "$" Then GoTo Passe2  
    Set sRep = Rep.subfolders  
    For Each sRp In sRep  
        S = UCase(sRp.Name)  
        If Left(S, 1) = "$" Or S = "WINDOWS" Or sRp.Attributes > 100 Or sRp.Attributes = 19 _  
            Or Left(S, 6) = "SYSTEM" Or Left(S, 7) = "PROGRAM" Or Left(S, 4) = "USER" _  
            Or Left(S, 6) = "DRIVER" Or Left(S, 5) = "TOOLS" Then GoTo Passe  
        On Error Resume Next  
        Set sR2 = sRp.subfolders  
        NbsR = sR2.Count  
        If Err <> 0 Then Err = 0: GoTo Passe  
        Incr Sr  
        sCle = sRp.Path & "\"  
        On Error GoTo 0  
        'Debug.Print sRp.Name; "   "; Cle; "  "; sCle  
        Set nodX = TreeDir.Nodes.Add(Cle, tvwChild, sCle, sRp.Name, 5, 4)  
        If NbsR > 0 Then  
            AjoutRep sRp.Path, sCle, TreeDir  
        End If  
Passe:  
    Next  
Passe2:  

    Set Obj = Nothing  
    Set Rep = Nothing  
    Set sRep = Nothing  
    Set nodX = Nothing  
    Set sR2 = Nothing  
End Sub  

Téléchargement


Note


Cette astuce est la première partie d'une appli complète pour le traitement des images qui fera l'objet de publications ultérieures.
Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Vb-remplir-un-treeview-avec-les-disques-du-pc.pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

A voir également

VB - Preencher uma TreeView com os discos do PC
Par pintuda le 22 septembre 2011
Publié par lermite222. - Dernière mise à jour par Jeff
Ce document intitulé «  [VB] Remplir un TreeView avec les disques du PC  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.