En developpant un site de gestion de documents, j’ai eu besoin d’obtenir l’icone associé à un type de fichier.
En soit, cela n’est pas très compliqué : on ouvre la base de registre (merci Microsoft.Win32.RegistryKey), on recupère l’information depuis HKEY_CLASSES_ROOT\{mon_extension}, on prends la valeur de la sous-clef DefaultIcon (avec le plus souvent une redirection : la valeur de la clef {mon_extension} donnant le nom d’une autre sous-clef de HKEY_CLASSES_ROOT à ouvrir). A partir de ces informations, nous pouvons determiner le path vers l’icone. Facile à écrire ! Là où ça ce complique, c’est que la plupart des icones sont contenu dans une DLL ou un EXE. Et que, à moins d’un oubli de ma part, .net ne propose pas de methode pour extraire une resource depuis un module executable.
Quelques instants passés dans mes souvenirs et l’API Windows ExtractIcon m’est apparue dans toute sa splendeur : cette fonction fait exactement ce dont j’avais besoin. Eh bien, qu’à cela ne tienne, avec un peu d’interop, on arrive à tout faire.
2 janv. 2008 à 23:21
Très bonne source mais je pense que ce serait bien de rajouter un truk pour que la fonction FromExtension() renvoie une icône de base en cas d'extension inconnue (on sais jamais)
21 août 2007 à 21:31
Et quand tu remplace ExtractIcon par ExtractIconEx il tu sort ca comme probleme .
C'est ca ?
18 août 2007 à 00:57
"An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll
Additional information: Win32 handle that was passed to Icon is not valid or is the wrong type."
Pour moi ...
12 août 2007 à 18:20
Pour recuperer les icones en 16*16 ,il faut utiliser " ExtractIconEx " qui permet de retourne les "large" et "small" icone .
26 mars 2007 à 12:19
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.