OVH Cloud OVH Cloud

Icons IshellFolder & Co

3 réponses
Avatar
MrHanky
Bonjour,

Je cherche deja depuis un bon bout de temps comment obtenir l'icone d'un
object decrit par un ITEMIDLIST *item, que l'on peut obtenir a partir d'un
SHGetDesktopFolder par exemple. Pour l'inserer dans un arbre. Il m'est
possible d'avoir des icones par l'intermediaire de SHGetFileInfo mais le
panneau de configuration par exemple donne n'importe quoi ainsi que les
lecteur A / C / D ...

Merci pour votre aide

Mr Hanky

3 réponses

Avatar
MrHanky
Merci arnaud, mais ma question etait claire : J'ai tous les elements
necessaires, mais rien a faire pour avoir les icones du panneau de
configuration par exemple, du poste de travail, ... Comment faire pour
extraire ces informations ? Voila mon code abrégé :

SHGetSpecialFolderLocation(hwnd,CSIDL_DESKTOP,&pidl);
memset(&sfi,0,sizeof(SHFILEINFO));
pSystemIcon (HIMAGELIST)SHGetFileInfo((LPCTSTR)pidl,0,&sfi,sizeof(SHFILEINFO),
SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON);

Apres ca, j'ai un handler sur le 'system icon', je l'integre a mon CTreeCtrl
puis :

ishellfolder->enumobject
foreach(object)
{
...

// Rechercher l'icone
attributes SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_BROWSABLE|SFGAO_HASSUBFOLDER;
Folder->GetAttributesOf(1,(LPCITEMIDLIST *)&ListItem,&attributes);
SHGetPathFromIDList(ListItem,Path);
SHGetFileInfo(Path,0,&FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX |
SHGFI_ICON);

...

// Et on l'integre a l'arbre
TreeItem.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
TreeItem.iImage = FileInfo.iIcon;
TreeItem.iSelectedImage = FileInfo.iIcon;

...
}

J'ai résumé mon code, vu qu'il y a des centaines de lignes. Mais le résultat
est étonnant : j'ai que les icones des .exe et des .pdf, .txt, d'autres
trucs comme ca et ... rien pour le disque A:, C:, D:, rien pour 'Mes
Documents', juste des icones de remplacements (par defaut un dossier
simple). Est-ce qu'il faut aller chercher l'icone en question pour chaque
fichier que je traite ? Si oui ou ? (Tout le monde a compris que je
programmais un equivalent du folder tree de IE rien d'autre, mais un truc
trop spécifique pour pouvoir utiliser autre chose de déjà écrit)

Help !

Mr Hanky


"Arnaud Debaene" a écrit dans le message de
news:3f3ff29d$0$16144$
MrHanky wrote:
> Bonjour,
Bonjour.
>
> Je cherche deja depuis un bon bout de temps comment obtenir
> l'icone d'un object decrit par un ITEMIDLIST *item, que l'on peut
> obtenir a partir d'un SHGetDesktopFolder par exemple. Pour l'inserer
> dans un arbre. Il m'est possible d'avoir des icones par
> l'intermediaire de SHGetFileInfo mais le panneau de configuration par
> exemple donne n'importe quoi ainsi que les lecteur A / C / D ...
>
ShGetDesktopFolder puis EnumObjects qui te renvoie un IEnumIDList. Appeler
Next sur cette interface te renvoie un ITEMIDLIST. Postes ton code si


tuas
un problème.

Arnaud




Avatar
Christian ASTOR
MrHanky wrote:

Je cherche deja depuis un bon bout de temps comment obtenir l'icone d'un
object decrit par un ITEMIDLIST *item, que l'on peut obtenir a partir d'un
SHGetDesktopFolder par exemple. Pour l'inserer dans un arbre. Il m'est
possible d'avoir des icones par l'intermediaire de SHGetFileInfo mais le
panneau de configuration par exemple donne n'importe quoi ainsi que les
lecteur A / C / D ...



Il faut concaténer les PIDL.
Avatar
MrHanky
oui, en effet ... Faut concatener les pidl avec un '0' pour terminaison ...
horrible ... du pur ms

"Christian ASTOR" a écrit dans le message de
news:
MrHanky wrote:

> Je cherche deja depuis un bon bout de temps comment obtenir l'icone


d'un
> object decrit par un ITEMIDLIST *item, que l'on peut obtenir a partir


d'un
> SHGetDesktopFolder par exemple. Pour l'inserer dans un arbre. Il m'est
> possible d'avoir des icones par l'intermediaire de SHGetFileInfo mais le
> panneau de configuration par exemple donne n'importe quoi ainsi que les
> lecteur A / C / D ...

Il faut concaténer les PIDL.