Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Parcourir les répertoires SHBrowseForFolder()

5 réponses
Avatar
Roger
Bonjour,
Pour parcourir les répertoires et laisser l'utilisateur en choisir un, j'ai
utilisé la fonction SHBrowseForFolder() de l'API Windows qui est dans
<shlobj.h>. Le problème c'est que pour savoir quel répertoire l'utilisateur
a choisi, j'ai besoin de connaître non seulement le répertoire terminal
choisi, mais aussi le chemin qui y mène à ce répertoire terminal. Or dans la
structure BROWSEINFO browse; au paramètre: browse.pszDisplayName qui
contient un pointeur sur le répertoire choisi, je n'obtiens que le
répertoire terminal choisi, sans le chemin complet !!
Question: y a-t-il un moyen de paramétrer la structure pour obtenir le
chemin complet ou faut-il utiliser une autre fonction ?
Merci.

5 réponses

Avatar
CriCri
Salut

Roger a écrit :

Question: [snip] ...faut-il utiliser une autre fonction ?



Vi :

BROWSEINFO bInfo;
LPITEMIDLIST pIdl;
TCHAR pszPath[ MAX_PATH ];

if ( ! ( pidl = SHBrowseForFolder( &bInfo ) )
|| ! SHGetPathFromIDList( pIdl, pszPath ) )
erreur()...


Cdlt
CC

--
bitwyse [PGP KeyID 0xA79C8F2C]
http://www.le-maquis.net
C'est comme au CNRS: des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
Avatar
Christian ASTOR
Roger a écrit :
Bonjour,
Pour parcourir les répertoires et laisser l'utilisateur en choisir un, j'ai
utilisé la fonction SHBrowseForFolder() de l'API Windows qui est dans
<shlobj.h>. Le problème c'est que pour savoir quel répertoire l'utilisateur
a choisi, j'ai besoin de connaître non seulement le répertoire terminal
choisi, mais aussi le chemin qui y mène à ce répertoire terminal. Or dans la
structure BROWSEINFO browse; au paramètre: browse.pszDisplayName qui
contient un pointeur sur le répertoire choisi, je n'obtiens que le
répertoire terminal choisi, sans le chemin complet !!
Question: y a-t-il un moyen de paramétrer la structure pour obtenir le
chemin complet ou faut-il utiliser une autre fonction ?
Merci.



Par exemple =>

BROWSEINFO bi = { 0 };
bi.lpszTitle = "Choix d'un répertoire";
bi.ulFlags = BIF_NEWDIALOGSTYLE;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl != 0)
{
char sPath[MAX_PATH], sBuffer[MAX_PATH];
if (SHGetPathFromIDList (pidl, sPath))
{
sprintf(sBuffer, "Répertoire : %sn", sPath);
MessageBox(NULL, sBuffer, "Information", MB_OK | MB_ICONINFORMATION);
}
}
Avatar
Roger
Merci à tous les deux,
J'avais trouvé seul la fonction SHBrowseForFolder, par contre je n'avais pas
bien compris l'utilisation de LPITEMIDLIST, de plus je n'avais pas trouvé la
fonction SHGetPathFromIDList et enfin le flag BIF_NEWDIALOGSTYLE n'existe
pas dans mon win32.hlp, celui-là je n'aurais pas pu l'inventer. Vous m'avez
permis de gagner beaucoup de temps !
A propos de mon win32.hlp sa dernière modification est du 26/11/1996, je
suppose qu'il existe quelque part des versions plus récentes.
Merci.

Avatar
Christian ASTOR
Roger a écrit :

A propos de mon win32.hlp sa dernière modification est du 26/11/1996, je
suppose qu'il existe quelque part des versions plus récentes.



Oui, dans le Windows SDK

Par exemple pour le Shell, c'est le fichier d'aide
ShellCC.chm
ou
ShellCC.hxs (avec un hxs viewer)
Avatar
Roger
A propos de mon win32.hlp sa dernière modification est du 26/11/1996, je
suppose qu'il existe quelque part des versions plus récentes.



Oui, dans le Windows SDK



Merci, mais euh, c'est quoi le Windows SDK ? (question probablement très
bête)