Newsgroup: it.comp.lang.visual-basic
Titolo: IShellFolder

beccati sto' sorgente....
bye bye
Lorenzo
Public Type BROWSEINFO
    hOwner As Long 'handle del form da cui si chiama la finestra di dialogo
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String 'titolo della finestra di dialogo
    ulFlags As Long   'tipo vedi flag successivi
    lpfn As Long
    lParam As Long
    iImage As Long
End Type
'Flags
Public Const BIF_RETURNONLYFSDIRS = &H1 'permette di selezionare solo
cartelle e drive
Public Const BIF_DONTGOBELOWDOMAIN = &H2 'non include cartelle di rete
Public Const BIF_STATUSTEXT = &H4
Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_BROWSEFORPRINTER = &H2000
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Sub Command1_Click()
Dim bInf As BROWSEINFO
Dim RetVal As Long
Dim PathID As Long
Dim RetPath As String
Dim Offset As Integer
'Imposta le proprietą della cartella
bInf.hOwner = Me.hWnd
bInf.lpszTitle = "Selezionare una cartella:" + Chr(0) 'prompt sotto la barra
del titolo
bInf.ulFlags = BIF_RETURNONLYFSDIRS 'permette di selezionare solo cartelle
'Mostra la finestra cartella standard
PathID = SHBrowseForFolder(bInf)
'legge il path del cassetto selezionato usando la funzione Api
SHGetPathFromIDList() che legge il path dal valore ritornato dalla
SHBrowseForFolder()
'il path viene messo nella stringa passata come secondo argomento
'la funzione ritorna 0 se l'utente ha premuto il tasto Annulla mentre 1 se
ha premuto OK
RetPath = Space$(512) + Chr(0) 'alloca ...
RetVal = SHGetPathFromIDList(ByVal PathID, ByVal RetPath)
If RetVal Then
    Offset = InStr(RetPath, Chr$(0)) 'cerca il carattere terminatore perchč
in seguito lo elimina
    MsgBox "La cartella selezionata č:" & Chr$(10) & Chr$(10) & _
    Left$(RetPath, Offset - 1) + " Questo percorso puņ essere utilizzato nei
programmi!", vbInformation, " Esempio"
Else            'ritorna 0 se l'utente ha premuto ANNULLA
    MsgBox "Operazione annullata!", vbInformation, _
    "Cartella"
End If

 Non credo fosse quello che chiedeva...
ho avuto anch'io quest'impressione, ma ho cercato ishellfolder con apiview e
il tool sempre 
allapi.net
 senza trovarlo. cos'e' ?

apiview e il tool sempre 
allapi.net
 senza trovarlo. cos'e' ?
risposta concisa: un'interfaccia COM
risposta sincera: non ne ho la più pallida idea
bisognereSSe chiedere a Juliet che comincia a masticare la 
programmazione ad oggetti... o a Roal che la mastica, ingoia e 
deglutisce già da un bel po' :)
-- 
January 15, 2028 - Intel announces their new 400THz processor, which 
performs 100 billion floating-point operations in the millisecond before 
it consumes itself in a nuclear explosion. This is a step up from AMD's 
recent processor which simply fries any nearby user with bolts of plasma 
energy. Hobbyists are already looking into ways to overclock the chip.

 il tool sempre 
allapi.net
 senza trovarlo. cos'e' ?
IShellFolder e' l'interfaccia (COM) che viene esposta da tutti gli
oggetti che fanno parte del Namespace della Shell di Windows (Explorer -
che non e' IE).
Se vuoi creare una estensione dello Shell Namespace devi implementare
quest'interfaccia. Per farlo in VB devi creare un file ODL (Object
Definition Language) in cui definisci l'interfaccia e poi creare unaType
Library (.tlb) da questo file con l'utility MIDL.EXE.
Poi basta aggiungere al progetto VB un riferimento alla Type Library
ottenuta ed implementare l'interfaccia (Implements IShellFolder).
Ciao.


Ha ragione.... me ne sono accorto dopo aver inviato il messaggio. Mi ha
confuso quel Folder e complice la fretta.
Lorenzo

MIDL.EXE.
aspetta, questa mi č nuova... spiega un po'?


 aspetta, questa mi č nuova... spiega un po'?
Non ci credo. Hyperion che non sa qualcosa?
fenomenale. un'occasione unica al mondo ;)
--
Fibia "Sakamoto" FBI
E-mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Sito Personale: 
http://www.geocities.com/fibiafbi
VB Simple: 
http://vbsimple.virtualave.net
Membro #25 delle Mitiche Brigate Takahashi sezione Sud

 fenomenale. un'occasione unica al mondo ;)
si', per fargli incasinare ancora un po' quel povero pc :))
fra un po' mi rivolgo all'ENPPc.

 aspetta, questa mi č nuova... spiega un po'?
Le estensioni dello Shell Namespace o lo scrivere una Type Library?
Provero' a dare una prima semplice spiegazione di entrambe.
Lo Shell Namespace e' in pratica cio' che si occupa di creare al vista
ad "albero" del file system di Windows.
Le estensioni dello Shell Namespace si occupano di creare cartelle
"virtuali" nella Shell e visualizzarle sul desktop o in Exlorer (come il
cestino, Risorse del Computer, Desktop, Risorse di Rete) o nel pannello
di controllo.
Per fare cio' devi implementare l'interfaccia IShelFolder (a seconda di
cosa fai anche altre). Per descrivere un interfaccia (questo in
qualunque oggetto COM) vengono utilizzate le Type Library che possono
essere un file (.tlb) oppure incluse come risorse nell'eseguibile (.dll
o .exe) ActiveX. Le Type Library sono la forma binaria di un file di
descrizione dell'interfaccia, che puo' essere un file ODL (Object
Definition Language) o IDL (Interface Definition Language). Vi sono
alcune differenze fra di loro, ma in generale sono equivalenti. VB, per
semplificare lo sviluppo di oggetti COM, crea automaticamente il file di
descrizione dell'interfaccia a partire dal codice scritto e lo compila
in una Type Library che include come risorsa nell'eseguibile. Non
permette pero' al programmatore di creare e/o modificare questo file.
Per questo e' necessario creare la type Library con altri strumenti (o
trovarne di gia' compilate).
Oltretutto dato che le Type Library possono anche definire le funzioni
esportate, basta crearne una che contenga la descrizione di tutte le
funzioni dell'API per  poter utilizzare tutte queste funzioni senza piu'
doverle dichiarare (con Declare).
Ciao.

tutte queste funzioni senza piu' doverle dichiarare (con Declare).
Questo lo sapevo, anzi, mi pare di essere stato io a scoprirlo due anni 
fa... (win.tlb, che però rivelossi essere un mostro non certo 
distribuibile)


 essere un mostro non certo distribuibile)
Allora ti e' sfuggita una cosa. Una volta compilato il progetto,
l'eseguibile non necessita piu' della TypeLibrary per funzionare, quindi
questa non va distribuita assieme all'applicazione.
Ciao.

quindi questa non va distribuita assieme all'applicazione.
che dire, non si finisce mai d'imparare :)
grazie mille :)