Newsgroup: it.comp.programmare.win32
Titolo: pidlRoot IDlist per una cartella del filesystem

dal manuale VIsual Studio:
===========================
pidlRoot
Pointer to an item identifier list (an ITEMIDLIST structure) specifying the
location of the "root" folder to browse from. Only the specified folder and
its subfolders appear in the dialog box. This member can be NULL, and in
that case, the name space root (the desktop folder) is used
===========================
typedef struct _ITEMIDLIST { // idl
    SHITEMID mkid;  // list of item identifers
} ITEMIDLIST, * LPITEMIDLIST;
typedef const ITEMIDLIST * LPCITEMIDLIST;
===========================
typedef struct _SHITEMID
    USHORT cb;
    BYTE   abID[1];
} SHITEMID, * LPSHITEMID;
typedef const SHITEMID  * LPCSHITEMID;
Defines an item identifier.
cb - Size of identifier, in bytes, including cb itself.
abID - Variable-length item identifier.
===========================
Domanda: se pidlRoot e' nullo, ottengo l'utilizzo del desktop folder, e'
scritto sopra: ma come si ottengono altri valori di pidlRoot?
Credo si tratti dei valori "cb" e abID[1] della struttura SHITEMID.
A me servirebbe, in particolare, ottenere il valore di pidlRoot per una
cartella che specifico io. Onde poter "pilotare" l'oggetto di partenza
(BROWSEINFO) in un finestra SHBrowseForFolder
Tenete conto che userei queste API da VB6
Se qualcuno puo' darmi suggerimenti...
Grazie!
Marco

 scritto sopra: ma come si ottengono altri valori di pidlRoot?
SHGetDesktopFolder ti torna l'interfaccia IShellFolder del desktop,
la cui funzione membro ParseDisplayName ti torna l'item-id-list
per quel che vuoi se le passi il relativo display-name.
Ci sono anche altri casi particolari, come SHGetSpecialFolderLocation.
Alex


Alex, grazie per la risposta: confesso che conosco solo le basi di VB6 ma
per alcune cose e' evidente che la chiamata delle API e' fondamentale...
I passi da seguire quali sono? Non riesco a capire come mettere insieme il
tutto.
Se c'e' quelche URL che mi puo' aiutare a capire, puoi suggerirmela?
I problemi sono circa :
SHGetDesktopFolder ha bisogno di un parametro:
===============
ppshf
Address that receives an IShellFolder interface pointer for the desktop
folder. The calling application is responsible for eventually freeing the
interface by calling its Release method.
===============
come ottengo questo indirizzo (ppshf)?
Private Declare Function SHGetDesktopFolder Lib "shell32.dll" Alias
"SHGetDesktopFolderA" (ByVal ppshf As Long) As Long
e' giusto ?
poi
interf = SHGetDesktopFolder (ByVal ppshf)
e ottengo un long da usare come ?
e la parsedisplayname?
================
HRESULT ParseDisplayName(    HWND hwndOwner,    LPBC pbcReserved,
    LPOLESTR lpszDisplayName,    ULONG *pchEaten,    LPITEMIDLIST *ppidl,
    ULONG *pdwAttributes   );
================
hwnd ok,
lpbc lo lascio null
lpszdisplatname e' la stringa col path che voglio,
 il resto ???
Grazie, se trovi il tempo di rispondere..
Marco


 e la parsedisplayname?
E` un metodo dell'interfaccia IShellFolder, una volta che
il VB la conosce per il resto dovrebbe aiutarti lui!-).
Piu` in generale: l'ottimo libro "Hardcore Visual Basic"
(disponibile anche in Italiano da Microsoft Press, e anche
sull'MSDN mi pare) comprende la type library per quasi
tutte le API di Windows, per cui, invece che un miliardo
di declare ecc ecc, si risolve tutto con due clic attraverso
project/references, e poi si ha tutto l'aiuto del VB, il che
facilita molto...
Alex

fra le librerie di oggetti note al tuo progetto).
Ti ringrazio, comincio ad orizzontarmi, e sposto la discussione anche su
ICLVB, anche se avevo gia' postato lo stesso argomento ma nessuno interviene
mai, ragion per cui mi ero spostato qui.
Ho controllato il riferimento a c:\winnt\system32\shdocvw.dll , che in
effetti mi mancava. Ora l'ho settato (tra le altre cose, il nome "gentile"
e' "Microsoft Internet Controls") ma il tipo di oggetto LPITEMIDLIST come il
LPOLESTR o LPBC che sono tra quelli della definizione di ParseDisplayName o
LPSHELLFOLDER della SHGetDesktopFolder, non esistono nel visualizzatore
oggetti, per cui penso che questo sia parte del problema.
Qualcuno (oltre ad Alex) ne sa qualcosa, specialmente in
It.comp.lang.visual.-basic?
Grazie,
Marco

 It.comp.lang.visual.-basic?
_se_ la richiesta e' quella che ho riassunto in alto,  ne avevo discusso
tempo fa, sul ng e altrove, e credo di avere un vbp di brad martinez del
ccrp che dimostra come ricavare le cartelle di sistema (pc, cestino,
desktop, rete). volendo, ci si salta fuori.
ricavare il percorso corrente e proporlo come default non e' altrettanto
semplice (diciamo pure semplice...).
dato che a me serviva per un free, ho deciso che il gioco non valeva la
candela...
cmq puoi provare
www.mvps.org
sia
/ccrp
sia
/mvps
eventualmente sottoponi il problema direttamente a brad, che e'
gentilissimo:
news://news.mvps.or
hth, pal
--
andrea dot palazzi at tin dot it
xday at libero dot it
free vb/sw: 
http://www.comune.modena.it/cittadini/apal/html/

hth, pal
Questa pero' me la spieghi ...
Ciao,
e grazie ancora
Marco

 Questa pero' me la spieghi ...
cosa ?
ciao, a.
