Extraire l'icone d'un fichier du shell [Résolu]

Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
- - Dernière réponse : Charles Racaud
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
- 1 févr. 2006 à 21:40
je voudrai pouvoir acceder et afficher dans ma form l'icone d'un fichier... pas un executable mais par ex un fichier txt... si vous avez word vous aurez donc une icone particuliere pour votre fichier txt... je suppose que cela est geré dans le shell


comment donc recuperer cette icone pour l'afficher?
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
29
3
Merci
en .net 2 ?
en .net 1 ?

en .net 2 : Icon.ExtractAssociatedIcon()

pour le .net 1... je te dirais ca ce soir... si personne n'est passé avant

Sébastien FERRAND
[MVP Visual C#]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
2.0
merci tu m'as bien aidé!


la société de consommation porte mal son nom car un con fait rarement une sommation avant de dire une connerie en société
Commenter la réponse de warenbe
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
63
0
Merci
Salut,

Oui, via la méthode SHGetFileInfo.

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
ok merci
je vais essayer de me debrouiller ave cça
le but serait de mettre une icone dans un listview a coté du nom du fichier...

desole pour les retours a la ligne manquants mais opera n'aime pas le freetextebox
Commenter la réponse de warenbe
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
63
0
Merci
Arf, je m'étais endormi sur le clavier :p

Pour la FTB, c'est connu comme problème, suffit de prendre IE ou FF.

Si tu es en 2.0 MS à déjà fait le boulot pour toi avec la méthode que t'as donner seb, je n'avais pas vu son message, et j'étais parti sur du 1.1

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
pourtant ça ne marche pas
mais je pense que je m'y prend mal
j'ai mis dans mon datalistview une collone definie pour supporter les images

et je fais list.Icon = Icon.ExtractAssociatedIcon(FileName[i]);
mais j'ai la petite image qui montre que l'image n'a pas ete trouvé dans la collone de mon datalistview
Commenter la réponse de warenbe
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
63
0
Merci
Je suppose que par "datalistview" tu voulais dire DataGridView : as tu mit la propriété DataGridViewImageColumn.ValuesAreIcons à true ?

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
oui pardon
oui je l'ai fais :(
Commenter la réponse de warenbe
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
TROUVE
j'utilisais mal le datagridview
desole pour le derangement

merci pour l'aide
Commenter la réponse de warenbe
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
63
0
Merci
Tu pourrais peut être décrire l'erreur et la solution, des fois que quelqu'un avec le même problème atterirais ici :-)

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
ben en fait je savais absolument pas utiliser le datagridview. je decouvre... donc pour decrire mon erreur je devrais faire un roman
ou alors je resume en quelques mots: penser a jeter un coup d'oeil a la msdn avant de faire n'importe quoi....

sinon question quand meme... les icones obtenues sont assez grosseS. il a t il possibilités de les reduires? j'obtient du 32x32 et je veux du 16x16 ;(
Commenter la réponse de warenbe
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
0
Merci
en fait voila comment je fais:

Icon ico = Icon.ExtractAssociatedIcon(FileName[i]);
dvimg.ValuesAreIcons = true;
DataGridViewRowCollection row = dataGridView1.Rows;
row.Add(ico);
Commenter la réponse de warenbe
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
22
0
Merci
Bonsoir,

Tu ne peut pas choisir la taille avec Icon.ExtractAssociatedIcon.
Tu peut utiliser la méthode SHGetFileInfo comme à dit coq:

using System.Runtime.InteropServices;

[...]

[DllImport("shell32.dll", EntryPoint = "SHGetFileInfo")]
private static extern int SHGetFileInfoA(string pszPath, int dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, int uFlags);
private const short SHGFI_ICON = 0x000000100;

[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO
{
public IntPtr HIcon;
public int Icon;
public int Attributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string DisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string TypeName;
}
public enum IconSize : short { Small 0x000000001, Large 0x000000000, }
public System.Drawing.Icon GetSmallIcon(string FileName, IconSize Size)
{
try
{
SHFILEINFO ShInfo = new SHFILEINFO();
SHGetFileInfoA(FileName, 0, ref ShInfo, (int)System.Runtime.InteropServices.Marshal.SizeOf(ShInfo), SHGFI_ICON | (short)Size);
return System.Drawing.Icon.FromHandle(ShInfo.HIcon);
}
catch
{
return null;
}
}

pour appeler la fonction:
Icon ico = GetSmallIcon(FileName[i], IconSize.Small)

Kenji

Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
Commenter la réponse de Charles Racaud