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

Signaler
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009
-
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
-
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?

13 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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#]
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

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é
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,

Oui, via la méthode SHGetFileInfo.

/*
coq
MVP Visual C#
*/
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
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#
*/
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Je suppose que par "datalistview" tu voulais dire DataGridView : as tu mit la propriété DataGridViewImageColumn.ValuesAreIcons à true ?

/*
coq
MVP Visual C#
*/
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

oui pardon
oui je l'ai fais :(
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

TROUVE
j'utilisais mal le datagridview
desole pour le derangement

merci pour l'aide
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
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#
*/
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

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 ;(
Messages postés
145
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 septembre 2009

en fait voila comment je fais:

Icon ico = Icon.ExtractAssociatedIcon(FileName[i]);
dvimg.ValuesAreIcons = true;
DataGridViewRowCollection row = dataGridView1.Rows;
row.Add(ico);
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
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.