Récupérer les icônes types des fichiers connus par Windows [Résolu]

Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
21 juin 2007
- 15 déc. 2004 à 17:02 - Dernière réponse :
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Dernière intervention
25 avril 2008
- 26 juil. 2005 à 22:26
Bonjour,
je développe une appli ressemblant à l'exploreur de Windows...
Pour lui ressembler à la goutte d'eau, je veux afficher l'icône type en face du fichier correspondant (ex : pour un fichier Word, il affiche l'îcone bleue avec le W)...

Je suis pas loin de réussir mais je bloque sur un truc...

Pour chaque fichier, je récupère son extension, après je vais dans la base de registre pour voir son type...
Après je vais chercher la valeur de la chaine suivante :

\HKEY_CLASS_ROOT\Word.Document.8\DefaultIcon\(par défaut)

Là il me sort l'emplacement de l'icône de Word :
C:\WINNT\Installer\{0001040C-78E1-11D2-B60F-006097C998E7}\wordicon.exe,1

C'est dans un fichier exécutable, et le 1 signifie que c'est la première icône dans cette bibliothèque...

Alors maintenant, afin de pouvoir l'afficher dans mon listView, je suppose que je doive mettre mon icône dans une ImageList

ImageList img = new ImageList();
img.Images.Add(Image.FromFile("C:\WINNT\Installer\{0001040C-78E1-11D2-B60F-006097C998E7}\wordicon.exe,1"));

Et ce code plante...
Quand je vais dans les détails de l'erreur ça me met qu'il trouve pas le fichier : System.IO.FileNotFoundException
Est-ce parce que le répertoire c:\Winnt\Installer\ est un répertoire réservé à windows, et que mon prog n'aurait pas les droits pour rentrer dedans ????

Je n'ai pas encore trouvé le moyen d'ajouter cette icône à mon ImageList...

Et juste pour voir, j'ai retiré le '1' à la fin et ça met une autre erreur : out of memory

Alors, si quelqu'un s'y connait là dedans, qu'il me réponde...

Merci d'avance...
Et bonnes fêtes à tous...

NB : là je met dans mon code le chemin direct pour une icône Word afin de mieux vous expliquer , mais dans mon prog c'est automatisé dans une boucle...
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
21 juin 2007
- 15 déc. 2004 à 17:37
3
Merci
Re-re-bonjour,
à force de surfer, j'ai trouvé la soluce...

Alors, il faut ajouter le namespace
using System.Runtime.InteropServices;

Dans votre classe, vous devez déclarez une fonction système qui se trouve dans une dll du système :

[DllImport("Shell32.dll")]
public extern static int ExtractIconEx( string nomFich,
int iconIndex,
IntPtr[] tabLargeIcon,
IntPtr[] tabSmallIcon,
int nbIcons );

Et ensuite, dans le code, on met :

ImageList img = new ImageList();
...
IntPtr[] Icone = new IntPtr[1];
int n = ExtractIconEx(@"C:\\WINNT\\Installer\\{0001040C-78E1-11D2-B60F-006097C998E7}\\wordicon.exe", 1, null, Icone, 1 );
Icon ic = Icon.FromHandle(Icone[0]);
img.Images.Add(ic);
...
listView.SmallImageList = img;
listView.Items.Add("fichier_exemple.doc");
listView.Items[index].ImageIndex = 0;

J'espère que ça pourra aider quelqu'un...
:)

Merci nerix27 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de nerix27
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
21 juin 2007
- 15 déc. 2004 à 17:06
0
Merci
Re-bonjour,
j'ai copié la bibliothèque wordicon.exe sous c:\
et changé mon code :
img.Images.Add(Image.FromFile("C:\\wordicon.exe,1"));

Et ça marche pas non plus, donc ce n'est pas un problème de droits sur le répertoire winnt\Installer\

Je vois toujours pas la soluce... ;-(
Commenter la réponse de nerix27
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Dernière intervention
25 avril 2008
- 26 juil. 2005 à 22:26
0
Merci
Merci beaucoup pour cette info,
Gluk
Commenter la réponse de cs_gluk

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.