Option Compare Database
Option Explicit
Public Type BROWSEINFO
hwndOwner As Long
pidlRoot As Long
pszDisplayName As String
pszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Const MAX_PATH As Long = 260
Const dhcErrorExtendedError = 1208&
Const dhcNoError = 0&
'指定根目录以通过常量浏览文件夹'您还可以通过常量为可搜索文件夹和选项指定值。
Const dhcCSIdlDesktop = &H0
Const dhcCSIdlPrograms = &H2
Const dhcCSIdlControlPanel = &H3
Const dhcCSIdlInstalledPrinters = &H4
Const dhcCSIdlPersonal = &H5
Const dhcCSIdlFavorites = &H6
Const dhcCSIdlStartupPmGroup = &H7
Const dhcCSIdlRecentDocDir = &H8
Const dhcCSIdlSendToItemsDir = &H9
Const dhcCSIdlRecycleBin = &HA
Const dhcCSIdlStartMenu = &HB
Const dhcCSIdlDesktopDirectory = &H10
Const dhcCSIdlMyComputer = &H11
Const dhcCSIdlNetworkNeighborhood = &H12
Const dhcCSIdlNetHoodFileSystemDir = &H13
Const dhcCSIdlFonts = &H14
Const dhcCSIdlTemplates = &H15
'用于限制 BrowseForFolder 对话框选择的常量
Const dhcBifReturnAll = &H0
Const dhcBifReturnOnlyFileSystemDirs = &H1
Const dhcBifDontGoBelowDomain = &H2
Const dhcBifIncludeStatusText = &H4
Const dhcBifSystemAncestors = &H8
Const dhcBifBrowseForComputer = &H1000
Const dhcBifBrowseForPrinter = &H2000
'...您可以从集成的 API 查看器中获取更多这些值以获取常量规范,或者访问 AllPai.net 并查看他们的示例。
Public Declare Function SHBrowseForFolder Lib "shell32.dll" (ByRef lpbi As BROWSEINFO) As Long
'更正
Public Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _
(ByVal hwndOwner As Long, ByVal nFolder As Long, ByRef pidl As Long) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function BrowseForFolder(ByVal lngCSIDL As Long, _
ByVal lngBiFlags As Long, _
strFolder As String, _
Optional ByVal hWnd As Long = 0, _
Optional pszTitle As String = "Select Folder") As Long
Dim usrBrws As BROWSEINFO
Dim lngReturn As Long
Dim lngIDL As Long
If SHGetSpecialFolderLocation(hWnd, lngCSIDL, lngIDL) = 0 Then
'在这里设置浏览结构
With usrBrws
.hwndOwner = hWnd
.pidlRoot = lngIDL
.pszDisplayName = String$(MAX_PATH, vbNullChar)
.pszTitle = pszTitle
.ulFlags = lngBiFlags
End With
'打开对话框
lngIDL = SHBrowseForFolder(usrBrws)
If lngIDL = 0 Then Exit Function
'如果成功
If lngIDL Then strFolder = String$(MAX_PATH, vbNullChar)
'resolve the long value form the lngIDL to a real path
If SHGetPathFromIDList(lngIDL, strFolder) Then
strFolder = Left(strFolder, InStr(1, strFolder, vbNullChar))
lngReturn = dhcNoError 'to show there is no error.
Else
'nothing real is available.
'return a virtual selection
strFolder = Left(usrBrws.pszDisplayName, InStr(1, usrBrws.pszDisplayName, vbNullChar))
lngReturn = dhcNoError 'to show there is no error.
End If
Else
lngReturn = dhcErrorExtendedError 'something went wrong
End If
BrowseForFolder = lngReturn
End Function