Salut à tous,

(Vous pouvez aller directement à "MA QUESTION" si vous voulez la version courte)

Dans le cadre de certains de mes programmes je me suis fait une fenêtre explorer qui a des fonctions que filebrowserdialog et cie n'ont pas. J'avais envie de vraiment plus développer ça, et si j'ai le temps un de ces quatre j'ai une application à faire qui aura besoin d'une interface complète de type explorer. L'idée ça va être de s'en servir pour du copier coller et faire évoluer une liste de somme de ces fichiers, contrôler l'intégrité etc... pour garantir les transferts. personnellement ça m'est déjà arrivé d'avoir des fichiers dont la somme md5 avait changé en cours de route, et le contenu inutilisable. Donc actuellement j'ia déjà un petit programme qui surveille certains dossiers et calcule automatiquement les sommes, il est sous protobuff pour être interrogeable de n'importe où vu qu'il tourne sur un nas "maison". Cet explorer va aussi dialoguer avec lui. Bref ça c'est le projet si j'ai le temps.

Là j'ai besoin de poser ma question en Français, je ne trouve pas certains mots dédiés en Anglais, puis StackOverFlow par exemple me sort un peu par les trous de nez, 90% des réponses ne vont pas répondre directement et vont faire totalement dévier le sujet. Du style "han mais t'as pas mis de code", s'ils veulent prendre 1 000 lignes de code dans les gencives je ne vois pas trop ce que ça va leur rapporter, et quand à mon taff il est en libre accès sur github, donc c'st pas comme si je faisais le rat à prendre des conseils dans redonner à la communauté. Après je ne suis qu'un amateur... (désolé pour la parenthèse, ils m'ont encore saoulé hier, 1 jour et demi de perdu, tu poses une question las de chercher à blanc.... 0 réponse en rapport, on te demande de poster ton code qui est une boucle sur la Même fonction, que tu as déjà cité... ben c'est une boucle les gars, voilà ça commence à 0 puis ça finit à X, une boucle quoi...). J'avais posté des screenshots du résultats, ce qui était plus parlant, mais faut croire que certains adorent placer "mets ton code" à chaque fois.

Bon désolé, en tout ça fait 3 jours pour rien, ou peu du moins.

MA QUESTION: (enfin plusieurs)
- Pour faire un explorer de fichiers en 2021, y 'a t'il un intérêt à utiliser les API de win32.dll (enfin à part une mais je vais y revenir) ? (Ne me parlez pas de l'exemple donné par Microsoft, je sais déjà le faire, mieux en fait)
- Existe t'il une solution pour récupérer les icones d'un dossier en passant par autre chose que win32.dll (par exemple pour one drive, mega, voire si possible la personnalisation qu'on fait nous mêmes de certains dossiers) ? (extract fonctionne pour les fichiers)
- Est ce qu'un couple "je lis le registre windows" + "les fonctions déjà intégrées à c#" est aussi intéressant (comparaison si possible) que d'utiliser le Shell ? (Ou c'est peut être pareil).
- Je cherche à faire une solution la plus évolutive possible, enfin de préférence, qui ne nécessite pas des mises à jour pour intégrer tel ou tel programme qui rajoute un élément dans le panneau de navigation (voir screenshot).
- Actuellement je peux récupérer les dossiers utilisés par Mega via le registre, existe t'il une autre solution ? Est ce que c'est ce qu'on fait en général dans ces cas là ? (J'ai développé jusque là des trucs qui n'en ont pas besoin).

Ce que j'envisage de faire c'est déjà d'avoir les mêmes éléments que dans le panneau navigation de l'explorer, avec les icones par défaut. J'ai trouvé pour l'accès rapide apparemment c'est un knownfolder donc ça sera pas dur, je me disais en fait qu'il existait peut être quelque chose d'autre que de lire dans la base de registre, après s'il n'y a pas et que c'est bien de passer par elle, je continuerai dans cette voie là. J'avoue avoir pas mal de soucis avec les API windows, ça va un peu mieux depuis ce matin mais il y a tellement de vieux code qui date de début 2000, j'ai du apprendre en vitesse express ce qui était deprecated etc... Disons que si c# fait la même chose et que ce n'est pas plus lent, ça règle le soucis. Après j'ai noté que mes HDD externes doivent démarrer parfois, et la fenêtre explorer de windows, semble ne pas avoir ce soucis.... Alors que pour la mienne, il semble démarrer au moment où ça va s'afficher, et même en asynchrone j'ai parfois une attente.

Nom : 2021-05-20_01h36_34.png
Affichages : 197
Taille : 5,1 Ko


au cas où si ça peut servir le code pour avoir les chemins de Mega (de l'utilisateur actuel).

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
 
     var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
            string userName = identity.Name.ToString();
            string userSID = identity.User.ToString();
            List<string> MegaFolderPaths = new List<string>();
            List<string> KnownFoldersIDExt = new List<string>();
 
            RegistryKey clsidKey = Registry.Users.OpenSubKey($"{userSID}\\Software\\Classes\\CLSID");
 
            //Get all the sub keys it contains
            foreach (string subKey in clsidKey.GetSubKeyNames())
            {
                RegistryKey clsidSubKey = Registry.Users.OpenSubKey($"{userSID}\\Software\\Classes\\CLSID\\{subKey}\\Instance\\InitPropertyBag");
 
                if (clsidSubKey == null)
                    continue;
 
                string defaultValue = (string)clsidSubKey.GetValue("TargetFolderPath");
 
                if (!string.IsNullOrEmpty(defaultValue))
                {
                    MegaFolderPaths.Add(defaultValue);
                    KnownFoldersIDExt.Add(subKey);
 
                }
            }
// --- Edit 21/05/2021 J'ai cru voir des réponses mais en fait non...

Bon avec un test via l'api, ayant finalement réussi à le faire, j'obtiens 90ms pour faire ma racine complète, contre 102ms en listant les disques durs et en extrayant les clés de la base de registre.
Sachant en passant donc que l'option 2 c'est sans extraire les icones, ayant fait un module pour les charger à part, quand la fenêtre wpf se charge et qu'elle demande l'image chaque objet renvoie vers un manager qui extrait l'icone (afin de pouvoir changer le set d'icones à la volée). Donc même si c'est fluide, ça devrait forcément alourdir.