Win95DirectoryPrompt

By | 2002-06-01

Prompting the User for a Directory in Win95. Windows’ common dialogs are great if you want the user to select a file, but what if you want them to select a directory? Call the following function, which relies on Win32’s new SHBrowseForFolder function:

Original Author: Found on the World Wide Web

API Declarations

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 Const BIF_RETURNONLYFSDIRS = 1
Private Const MAX_PATH = 260
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

Code

Public Function BrowseForFolder(hWndOwner As Long, sPrompt As String) As String
  Dim iNull As Integer
  Dim lpIDList As Long
  Dim lResult As Long
  Dim sPath As String
  Dim udtBI As BrowseInfo
  With udtBI
    .hWndOwner = hWndOwner
    .lpszTitle = lstrcat(sPrompt, "")
    .ulFlags = BIF_RETURNONLYFSDIRS
  End With
  lpIDList = SHBrowseForFolder(udtBI)
  If lpIDList Then
    sPath = String$(MAX_PATH, 0)
    lResult = SHGetPathFromIDList(lpIDList, sPath)
    Call CoTaskMemFree(lpIDList)
    iNull = InStr(sPath, vbNullChar)
    If iNull Then
      sPath = Left$(sPath, iNull - 1)
    End If
  End If
  BrowseForFolder = sPath
End Function

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.