' ' This Visual Basic 6.0 source code illustrates the use of the 'SHBrowseForFolder function. ' 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 Const BIF_RETURNONLYFSDIRS = 1 ' return only if a folder is selected Const MAX_PATH = 260 'a 260 character buffer for the returned folder Const BIF_USENEWUI As Long = &H40 ' use the new style browse window Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long) Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long 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 Sub Form_Load() Dim iNull As Integer, lpIDList As Long, lResult As Long Dim sPath As String, udtBI As BrowseInfo With udtBI 'Set the owner window .hWndOwner = Me.hWnd 'lstrcat appends the two strings and returns the memory address .lpszTitle = lstrcat("Please select a folder:", "") 'Return only if the user selected a directory .ulFlags = BIF_RETURNONLYFSDIRS 'uncomment the following line if you wish to see the new style browse window ' .ulFlags = .ulFlags Or BIF_USENEWUI End With lpIDList = SHBrowseForFolder(udtBI) If lpIDList Then sPath = String$(MAX_PATH, 0) 'Get the path from the IDList SHGetPathFromIDList lpIDList, sPath 'free the block of memory CoTaskMemFree lpIDList ' search for the null character at the end of the path and remove it iNull = InStr(sPath, vbNullChar) If iNull Then sPath = Left$(sPath, iNull - 1) End If If Len(sPath) = 0 Then MsgBox "You have probably clicked on Cancel." Else MsgBox "The selected folder is " & sPath End If End Sub