分享:打开选择文件夹窗口的模块
这次分享打开选择文件夹窗口的模块,如果把参数WenJian设为True,这样除了可以选择文件夹,还可选择文件。如果把参数RootFolder填一个文件夹路径,这样就会只能选择这个文件夹以及子文件夹和文件,不能选择此文件夹以外的其他内容。
- VB code
Option ExplicitPrivate Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (LpBrowseInfo As BROWSEINFO) As LongPrivate Declare Function SHGetPathFromIDlist Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal Pidl As Long, ByVal pszPath As String) As LongPrivate Declare Function SHILCreateFromPath Lib "shell32.dll" (ByVal pszPath As String, ppidl As Long, rgflnOut As Long) As LongPrivate Type BROWSEINFO hOwner As Long pidlroot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lparam As Long iImage As LongEnd TypePrivate Const BIF_RETURNONLYFSDIRS = &H1Private Const BIF_BROWSEINCLUDEFILES = &H4000Private Const S_OK = &H0Public Function BrowseFolder(ByVal hWnd As Long, Optional Title As String, Optional WenJian As Boolean = False, Optional RootFolder As String) As StringDim BI As BROWSEINFO, Pidl As Long, FolderPath As String, RootPidl As Long FolderPath = Space(8192) With BI If IsNumeric(hWnd) Then .hOwner = hWnd If WenJian = False Then .ulFlags = BIF_RETURNONLYFSDIRS Else .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_BROWSEINCLUDEFILES End If If Title <> "" Then .lpszTitle = Title Else .lpszTitle = "请选择文件夹或文件" End If If RootFolder <> "" Then RootFolder = StrConv(RootFolder, vbUnicode) If SHILCreateFromPath(RootFolder, RootPidl, ByVal 0) = S_OK Then .pidlroot = RootPidl End If End With Pidl = SHBrowseForFolder(BI) If SHGetPathFromIDlist(Pidl, FolderPath) Then BrowseFolder = Left(FolderPath, InStr(FolderPath, vbNullChar) - 1) Else BrowseFolder = "" End IfEnd Function
[解决办法]
马克!!!
[解决办法]
好东西
[解决办法]
LZ貌似少了CoTaskMemFree
[解决办法]
谢谢分享,尽管早就见到过了
[解决办法]
'感谢分享!调用
Private Sub Command1_Click()
Text1.Text = BrowseFolder(Me.hWnd)
End Sub
[解决办法]
不是的西
[解决办法]
mark
[解决办法]
很好,再给个用法,选择文件
Text2.Text = BrowseFolder(Me.hWnd, , True)