IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Changer L'icone d'un repertoire par programme


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Par défaut Changer L'icone d'un repertoire par programme
    Bonjour a tous

    J'utilise une petite Interface en Vb Net pour creer des Repertoire a chaque fois que l'on click sur un Bouton AJOUTER REP... Tout se passe bien simplement je voudrais associer une Icone a ce nouveau repertoir suivant un critère SELECT CASE:..........

    Je me demande si cela est possible.

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je sais pas si c'est pareil sous Vista et Seven, mais sous XP il faut créer un fichier Desktop.ini (ou le modifier s'il existe déjà) pour y ajouter quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [.ShellClassInfo]
    IconFile=%SystemRoot%\system32\SHELL32.dll
    IconIndex=165
    Dans l'exemple ci-dessous, l'icone est dans la DLL shell32 à l'index 165. Si c'est juste un fichier icône, a priori tu peux mettre le chemin complet du fichier, et l'index 1 (ou 0, je sais plus)

    Ce fichier est supposé avoir les attributs suivants :
    - Système
    - Caché

    Donc tu pourrais faire une méthode dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SetFolderIcon(Dim folderPath As String, Dim iconPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        Using writer As New StreamWriter(iniFilePath)
            writer.WriteLine("[.ShellClassInfo]")
            writer.WriteLine("IconFile={0}", iconPath)
            writer.WriteLine("IconIndex=1")
        End Using
        File.SetAttributes(iniFilePath, FileAttributes.Hidden Or FileAttributes.System)
    End Sub
    Attention, ce code ne gère pas le cas où le fichier Desktop.ini existe déjà ; s'il existe, il sera écrasé... Si tu veux faire ça plus proprement, tu peux utiliser la classe IniFile dans la librairie Dvp.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub SetFolderIcon(Dim folderPath As String, Dim iconPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        Dim ini As New IniFile(iniFilePath)
        ini(".ShellClassInfo", "IconFile") = iconPath
        ini(".ShellClassInfo", "IconIndex") = "1"
        ini.Save()
        File.SetAttributes(iniFilePath, FileAttributes.Hidden Or FileAttributes.System)
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Par défaut Merci Tomlev
    Citation Envoyé par tomlev Voir le message
    Je sais pas si c'est pareil sous Vista et Seven, mais sous XP il faut créer un fichier Desktop.ini (ou le modifier s'il existe déjà) pour y ajouter quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [.ShellClassInfo]
    IconFile=%SystemRoot%\system32\SHELL32.dll
    IconIndex=165
    Dans l'exemple ci-dessous, l'icone est dans la DLL shell32 à l'index 165. Si c'est juste un fichier icône, a priori tu peux mettre le chemin complet du fichier, et l'index 1 (ou 0, je sais plus)

    Ce fichier est supposé avoir les attributs suivants :
    - Système
    - Caché

    Donc tu pourrais faire une méthode dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SetFolderIcon(Dim folderPath As String, Dim iconPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        Using writer As New StreamWriter(iniFilePath)
            writer.WriteLine("[.ShellClassInfo]")
            writer.WriteLine("IconFile={0}", iconPath)
            writer.WriteLine("IconIndex=1")
        End Using
        File.SetAttributes(iniFilePath, FileAttributes.Hidden Or FileAttributes.System)
    End Sub
    Attention, ce code ne gère pas le cas où le fichier Desktop.ini existe déjà ; s'il existe, il sera écrasé... Si tu veux faire ça plus proprement, tu peux utiliser la classe IniFile dans la librairie Dvp.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub SetFolderIcon(Dim folderPath As String, Dim iconPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        Dim ini As New IniFile(iniFilePath)
        ini(".ShellClassInfo", "IconFile") = iconPath
        ini(".ShellClassInfo", "IconIndex") = "1"
        ini.Save()
        File.SetAttributes(iniFilePath, FileAttributes.Hidden Or FileAttributes.System)
    End Sub

    Merci Pour ton aide , comme je suis encore debutant il va falloir que je me penche un peu sur ton code et le comprendre. Une question le fichier Desktop.ini s'il existe , une fois changé , ca ne va pas affecter les icones des autres dossier ( question qui me passe par la tete)

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par AirbusA330 Voir le message
    Une question le fichier Desktop.ini s'il existe , une fois changé , ca ne va pas affecter les icones des autres dossier ( question qui me passe par la tete)
    non, ça change seulement le dossier qui contient le fichier Desktop.ini

  5. #5
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Génial, Thomas!

    La classe IniFile, c'est pile ce que je cherche depuis un paquet de temps et que je n'arrive pas à me faire proprement.
    De la même manière on peut donc aussi ajouter un "InfoTip" dans la section [.ShellClassInfo].
    Je crois que WriteLine met des guillemets à chaque ligne, peut-être qu'il faut utiliser PrintLine? à tester.

    Question : pourquoi les modifications opérées par programme ne sont-elles pas reflétées par l'affichage du dosier dans l'explorateur (icone personnalisée, infotip, etc.) ?
    Créer in "Desktop.ini" avec l'attribut "fichier systeme" semble ne pas suffire. Que faut-il faire d'autre?

    Merci!!

    Vincent

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Vincent_04 Voir le message
    Je crois que WriteLine met des guillemets à chaque ligne, peut-être qu'il faut utiliser PrintLine? à tester.
    Non, StreamWriter.WriteLine ne met pas de guillemets (sauf évidemment si tu les mets dans la chaine à écrire...). Le PrintLine dont tu parles, c'est celui du module FileSystem ? Evite d'utiliser ça, ça existe uniquement pour la compatibilité avec VB6. Utilise plutôt les classes du namespace System.IO

    Citation Envoyé par Vincent_04 Voir le message
    Question : pourquoi les modifications opérées par programme ne sont-elles pas reflétées par l'affichage du dosier dans l'explorateur (icone personnalisée, infotip, etc.) ?
    Créer in "Desktop.ini" avec l'attribut "fichier systeme" semble ne pas suffire. Que faut-il faire d'autre?
    Sous quel OS ? Je crois que j'avais testé sous XP, ça fonctionnait. Mais je viens de retester sous Seven, et ça marche pas... Seven (et pt-être Vista aussi) doit gérer ça différemment

  7. #7
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Non, StreamWriter.WriteLine ne met pas de guillemets (sauf évidemment si tu les mets dans la chaine à écrire...). Le PrintLine dont tu parles, c'est celui du module FileSystem ?
    Exact. faut que j'utilise un StreamWriter. C'était un vieux souvenir...

    Citation Envoyé par tomlev Voir le message
    Sous quel OS ? Je crois que j'avais testé sous XP, ça fonctionnait. Mais je viens de retester sous Seven, et ça marche pas... Seven (et pt-être Vista aussi) doit gérer ça différemment
    Sous XP. Bon si tu dis que ça marche, je retente le coup.
    J'ai un autre pb avec la classe Inifile... J'ai bien peur qu'il y ait un bug dans le contructeur. New renvoie une erreur si je spécifie des parmètres. Et si je crée une instance vide, lui attribue un fileName et la reloade, même erreur. Et comme je suis armoire en C++...
    Dommage!!

    --edit--
    Je viens de voir que tu es l'auteur de IniFile. Désolé pour l'histoire du bug... Il y a un truc que je ne dois pas faire correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDesktopIni = New IniFile("INIfileFullPath",True)
    Je reçois le message d'exception :
    Un élément avec la même clé a déjà été ajouté.
    --/edit--

    Merci bien pour tes réponses

    vincentmichel.eu

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Vincent_04 Voir le message
    Sous XP. Bon si tu dis que ça marche, je retente le coup.
    Bon, je croyais avoir testé, mais apparemment je croyais mal
    Ca peut pas marcher, parce qu'il y a un bug dans IniFile qui fait qu'il ne gère pas les noms de section qui contiennent un point, comme ".ShellClassInfo"

    Par contre, après correction, ça fonctionne bien sous XP...

    Citation Envoyé par Vincent_04 Voir le message
    Et comme je suis armoire en C++...
    Pas grave, c'est du C#

    Citation Envoyé par Vincent_04 Voir le message
    Je viens de voir que tu es l'auteur de IniFile. Désolé pour l'histoire du bug... Il y a un truc que je ne dois pas faire correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDesktopIni = New IniFile("INIfileFullPath",True)
    Je reçois le message d'exception : "Un élément avec la même clé a déjà été ajouté".
    A priori c'est lié au bug mentionné plus haut. Si je comprends bien ce qui se passe, la première exécution ne doit pas causer d'erreur, mais la suivante oui...

    Ce sera corrigé dans la prochaine version de la lib Dvp.NET. En attendant, si tu veux corriger toi même, il faut modifier une expression régulière dans IniFile.cs :

    Ancien code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    private static readonly Regex _regexSection = new Regex(@"\s*\[\s*([\w\s]+)\]", RegexOptions.Compiled);
    Nouveau code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    private static readonly Regex _regexSection = new Regex(@"\s*\[\s*([\.\w\s]+)\]", RegexOptions.Compiled);


    Le code VB avec lequel j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub SetFolderIcon(ByVal folderPath As String, ByVal iconPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        Dim attr As FileAttributes
        Dim ini As IniFile
        If File.Exists(iniFilePath) Then
            attr = File.GetAttributes(iniFilePath)
            File.SetAttributes(iniFilePath, attr And Not (FileAttributes.System Or FileAttributes.Hidden))
            ini = New IniFile(iniFilePath)
        Else
            attr = FileAttributes.System Or FileAttributes.Hidden
            ini = New IniFile()
        End If
        ini(".ShellClassInfo", "IconFile") = iconPath
        ini(".ShellClassInfo", "IconIndex") = "0"
        ini.FileName = iniFilePath
        ini.Save()
        File.SetAttributes(iniFilePath, attr)
    End Sub
     
    Sub RemoveFolderIcon(ByVal folderPath As String)
        Dim iniFilePath As String = Path.Combine(folderPath, "Desktop.ini")
        If File.Exists(iniFilePath) Then
            Dim attr As FileAttributes = File.GetAttributes(iniFilePath)
            File.SetAttributes(iniFilePath, attr And Not (FileAttributes.System Or FileAttributes.Hidden))
            Dim ini As IniFile = New IniFile(iniFilePath)
            If ini.Sections.ContainsKey(".ShellClassInfo") Then
                ini.Sections(".ShellClassInfo").Remove("IconFile")
                ini.Sections(".ShellClassInfo").Remove("IconIndex")
                ini.FileName = iniFilePath
                ini.Save()
            End If
            File.SetAttributes(iniFilePath, attr)
        End If
    End Sub
    Remarque que j'enlève les attributs "système" et "caché" avant de modifier le fichier, et que je les remets après : sinon j'ai une erreur "accès refusé", du moins sous Seven

  9. #9
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    salut Thomas,

    Vraiment merci pour tes réponses, c'est nikel! Je comprends tout.
    Quand on est patient avec les polios, on s'en débarrase plus vite parce qu'ils comprennent tout de suite!!

    Bon, je suis reparti de zéro en m'inspirant vaguement de la logique de ton IniFile.cs.
    Le fichier INI est lu et son contenu est copié dans une variable tableau. Toutes les modifications sont effectuées dans cette variable et ne sont reportées dans le fichier INI que par la procédure Save(), par un WriteAllText.
    Quand il faut ajouter une clé, je l'insère dans l'entrée du tableau qui suit avec un VBCR, je Join() le tableau avec VBCR et je re-Split() avec VBCR. Super pratique!
    Ensuite, elles sont détruites par la procédure Close().
    C'était plus simple pour moi.
    Je viens de faire quelques tests, ça a l'air de rouler.

    Désolé pour le bug à cause du point dans le nom de la section!!

    Envoyé par Vincent_04
    Et comme je suis armoire en C++...
    Pas grave, c'est du C#


    Par contre, j'ai un beau fichier desktop.ini dans mon dossier mais l'explorateur ne montre aucune des personnalisasations, ni icone, ni infotip... Je fais F5 ou je ferme puis rouvre, ça change que dalle...
    Il y a donc une autre manip à faire, ça confirme mon souvenir.
    - Laquelle???
    Dans le temps, avec W98, il y avait un truc qui s'appelait persitmoniker ou persist... ça doit tjrs exister mais ailleurs. je ne sais pas ce que c'est ce truc!
    T'as pas une idée?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Vincent_04 Voir le message
    Désolé pour le bug à cause du point dans le nom de la section!!
    Sois pas désolé, au contraire : ça m'a permis de corriger le bug dans la lib Dvp.NET

    Citation Envoyé par Vincent_04 Voir le message
    Par contre, j'ai un beau fichier desktop.ini dans mon dossier mais l'explorateur ne montre aucune des personnalisasations, ni icone, ni infotip... Je fais F5 ou je ferme puis rouvre, ça change que dalle...
    Il y a donc une autre manip à faire, ça confirme mon souvenir.
    - Laquelle???
    Dans le temps, avec W98, il y avait un truc qui s'appelait persitmoniker ou persist... ça doit tjrs exister mais ailleurs. je ne sais pas ce que c'est ce truc!
    T'as pas une idée?
    Le contenu du fichier est correct ? Ca doit ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [.ShellClassInfo]
    IconFile=%SystemRoot%\system32\SHELL32.dll
    IconIndex=165
    Et le fichier doit avoir les attributs System et Hidden (je ne sais pas si ce dernier est indispensable)

    J'ai testé ce matin, ça fonctionnait bien (Win XP)

  11. #11
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Bonjour Thomas,
    Citation Envoyé par tomlev Voir le message
    Le contenu du fichier est correct ?
    Carrément correct!
    Aussi les retours de lignes sont en fait des vbCrLf et non des vbCr, j'ai vérifié.
    Citation Envoyé par tomlev Voir le message
    le fichier doit avoir les attributs System et Hidden
    C'est OK aussi; je le passe en Normal le temps de l'écriture, puis le remets en System et Hidden.
    Je me pose deux questions que je dois vérifier ce soir :
    1. l'encodage (System.Text.Encoding) est-il le bon? j'ai choisi "Default" (page de code du système) qui semble me renvoyer le texte sans remplacement ni supression de caractères. C'est quoi l'encodage de ce fichier?
    2. je n'ai pas encore déterminé si c'est à la création du fichier Desktop.ini que ça ne marche pas ou pour toute modification (les modifications manuelles fonctionnent)

    J'ai testé ce matin, ça fonctionnait bien (Win XP)
    XP aussi. Tu l'as testé avec ta classe IniFile?


    Pourquoi il n'y a pas ces infos chez Microsoft? Tout le monde est censé savoir ces trucs?!! Sans blague! C'est nul de devoir réinventer la roue à chaque fois.
    Bon, sans commentaires...

    Merci pour tes infos tjrs aussi claires

    http://vincentmichel.eu

  12. #12
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Je pense que j'ai compris le truc: il ne suffit pas de créer un Desktop.ini, il faut également modifier les attributs du dossier qui le contient en 'System'.
    Vérification dans l'heure qui suit...

    à++

  13. #13
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    ça marche.
    deux opératons sont nécessaires:
    1. créer le fichier desktop.ini avec son contenu ad hoc et les attributs System + Hidden
    2. donner l'attribut System au dossier que l'on veut personnaliser
    Ouf!

    pour la classe IniFile, ça serait peut-être pas mal de contrôler le nom du fichier INI et de passer l'attribut System au dossier contenant si c'est un desktop.ini et s'il y a le .ShellClassInfo ?

    à++

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre de devoir mettre l'attribut System sur le dossier... je ne crois pas l'avoir fait et ça marchait, je vérifierai lundi au bureau (XP)

    Chez moi sous Seven, ça ne fonctionne pas même avec l'attribut System

    EDIT: sous Seven, quand je change l'icone par la fenêtre de propriétés, il écrit ça dans Desktop.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [.ShellClassInfo]
    IconResource=D:\MonIcone.ico,0
    et pas d'attribut System sur le dossier

  15. #15
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Bizarre de devoir mettre l'attribut System sur le dossier... je ne crois pas l'avoir fait et ça marchait, je vérifierai lundi au bureau (XP)
    Il suffit que tu l'aies fait une fois à la main avec la boite de dialogue Propriétés onglet personnaliser. Ajoute une colone pour les attributs dans le dossier parent des dossiers à personnaliser et vois ce qui se passe quand tu personnalise l'icône. En fait, il passe en R (readonly) et non S (system).
    Ensuite, tu peux suprimer manuellement le Desktop.ini, mais le dossier qui le contenait reste en R. Sauf avec ATTRIB -R en invite de commandes ou avec IO.FileAttributes.Directory dans mon code, je ne vois aucun moyen "classique" de le remettre en normal.
    Donc par la suite, forcément, ça marche avec le code.
    Essaie maintenant avec le code dans un dossier dont tu es sûr qu'il est sans attribut. Tu verras que ça ne fonctionne pas (on est bien sous XP).
    Je viens de vérifier à l'instant: aucun attribut au dossier, ça ne fonctionne pas. Readonly ça marche, System également.
    Cependant, comme lorsque l'on fait cette personnalisation avec la boîte de dialogue des propriétés, ça le met en R je fais pareil dans mon code. et je prévois bien de le remettre en Directory si je supprime programatiquement le Desktop.ini. Voilà...
    Bon, ça marche dans la fenêtre principale mais pas dans l'arborescence du volet des dossiers qui nécessite de sérieux rafraichissement (des litres de bière).
    Citation Envoyé par tomlev Voir le message
    sous Seven, quand je change l'icone par la fenêtre de propriétés, il écrit ça dans Desktop.ini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [.ShellClassInfo]
    IconResource=D:\MonIcone.ico,0
    et pas d'attribut System sur le dossier
    Iconfile et iconindex sur une même ligne, c'est bien. Mais pas d'attribut System... De toutes façons, l'attribut du dossier n'apparait pas dans le Desktop.ini. Bon, tu as dû vérifier en affichant la colonne des attributs je suppose... Si c'est ça, c'est retour à la case départ. Peut-être quand même un attribut Readonly, non, en cherchant bien?
    J'aurai bientôt l'occasion de vérifier, il faut que je fasse la mise à jour d'un vieux code VBA sous excel. Galère en perspective...
    http://vincentmichel.eu

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Vincent_04 Voir le message
    Bon, tu as dû vérifier en affichant la colonne des attributs je suppose... Si c'est ça, c'est retour à la case départ. Peut-être quand même un attribut Readonly, non, en cherchant bien?
    J'ai vérifié avec la commande ATTRIB. Effectivement j'ai l'attribut R sur le dossier...

  17. #17
    Membre habitué
    Compositeur - Romancier
    Inscrit en
    Octobre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations professionnelles :
    Activité : Compositeur - Romancier
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2010
    Messages : 12
    Par défaut
    Citation Envoyé par tomlev Voir le message
    J'ai vérifié avec la commande ATTRIB. Effectivement j'ai l'attribut R sur le dossier...
    Cool.
    On a donc maintenant tous les éléments pour répondre très complètement à notre ami AirbusA330...
    S'il veut bien nous préciser cette histoire de Select Case, on peut lui pondre un petit exemple facile à comprendre.

    Et puis, je me disais que ça serait super d'implémenter le traitement spécifique des Desktop.ini dans ta classe IniFile, qu'en penses-tu? Peut-être que ça l'alourdirait considérablement, je ne sais pas.

    En tout cas, merci pour tout!

    À++

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Vincent_04 Voir le message
    Et puis, je me disais que ça serait super d'implémenter le traitement spécifique des Desktop.ini dans ta classe IniFile, qu'en penses-tu? Peut-être que ça l'alourdirait considérablement, je ne sais pas.
    Non, c'est trop spécifique ; IniFile est destinée à la manipulation des fichiers .ini en général, pas de Desktop.ini en particulier. Eventuellement, on pourrait faire une classe DesktopIniFile qui en hérite.

Discussions similaires

  1. [OL-2010] Changer d'icone pour un Repertoire outlook
    Par metramo dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 27/10/2014, 10h13
  2. Modifier l'icone de l'exe par programmation
    Par lepirate dans le forum WinDev
    Réponses: 1
    Dernier message: 06/07/2008, 22h13
  3. Réponses: 2
    Dernier message: 07/06/2008, 16h53
  4. Créer un repertoire par programmation
    Par Diablo_22 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/06/2008, 11h36
  5. Changer la culture d'un ascx par programme.
    Par jab dans le forum ASP.NET
    Réponses: 0
    Dernier message: 04/09/2007, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo