Mostrare la finestra per la scelta di una directory

Avrete certamente notato che molte applicazioni Windows fanno uso di una finestra che permette all'utente di scegliere una cartella - su una qualunque unità collegata - dove, ad esempio, salvare un file.

Avrete certamente notato che molte applicazioni Windows fanno uso di una finestra che permette all’utente di scegliere una cartella – su una qualunque unità collegata – dove, ad esempio, salvare un file.

Per farne uso anche nella vostra applicazione Visual Basic, è sufficiente sfruttare alcune funzioni API.

Il nome della cartella selezionata verrà salvato nella variabile sBuffer.

Option Explicit

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Declare Function SHBrowseForFolder Lib _
"shell32" (lpbi As BrowseInfo) As Long

Private Declare Function SHGetPathFromIDList Lib _
"shell32" (ByVal pidList As Long, ByVal lpBuffer _
As String) As Long

Private Declare Function lstrcat Lib "kernel32" _
Alias "lstrcatA" (ByVal lpString1 As String, ByVal _
lpString2 As String) As Long

Private Type BrowseInfo
hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type

Private Sub Command1_Click()

'Apre un dialog box che permette di scegliere
'una cartella da una qualunque unità collegata

Dim lpIDList As Long 'Declare Varibles
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BrowseInfo

szTitle = "Scrivere qui il testo da visualizzare nel dialog box."
'Testo che appare nell'area grigia sotto la barra del titolo

With tBrowseInfo
    .hWndOwner = Me.hWnd
    .lpszTitle = lstrcat(szTitle, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
MsgBox sBuffer
End If

End Sub

Ti consigliamo anche

Link copiato negli appunti