浏览文件夹API

声明
Option Explicit

'浏览文件夹对话框函数

Public Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As LongByVal pszPath As StringAs Long

Public Type BROWSEINFO
    hOwner 
As Long                 '注释:父窗口的句柄
    pidlRoot As Long               '注释:指向希望浏览的最上层的文件夹的标识符列表,可设为0
    pszDisplayName As String       '注释:返回你所选择的文件夹(带一个NULL字符)
    lpszTitle As String            '注释:对话框标题(要以vbNullChar结尾)
    ulFlags As Long                '注释:浏览标志(见下面)
    lpfn As Long                   '注释:回调函数的地址,可设为NULL
    lParam As Long                 '注释:若有回调函数,此项设置它的值
    iImage As Long                 '注释:保存所选文件夹映像索引的缓冲区
End Type

Public Const BIF_BROWSEFORCOMPUTER = &H1000             '注释:允许浏览计算机
Public Const BIF_BROWSEFORPRINTER = &H2000              '注释:允许浏览打印机文件夹
Public Const BIF_BROWSEINCLUDEFILES = &H4000            '注释:允许同时浏览文件(需IE4)
Public Const BIF_DONTGOBELOWDOMAIN = &H2                '注释:强制用户停留在网上邻居中
Public Const BIF_EDITBOX = &H10                         '注释:可在输入框中直接输入文件夹名(需IE4)
Public Const BIF_RETURNFSANCESTORS = &H8                '注释:返回文件系统祖先
Public Const BIF_RETURNONLYFSDIRS = &H1                 '注释:仅允许浏览文件系统
Public Const BIF_STATUSTEXT = &H4                       '注释:显示状态栏
Public Const BIF_USENEWUI = &H40                        '注释:使用新界面(仅支持Win2000、WinME)
Public Const BIF_VALIDATE = &H20                        '注释:若输入一个非法文件夹名,就返回BFFM_VALIDATEFAILED 给回调函数

Public Function BrowseFolder(Optional Title As StringOptional hwnd As LongAs String
    
Dim bi As BROWSEINFO
    
Dim pidl As Long
    
Dim folder As String

    folder 
= String(255, vbNullChar)
  
    
With bi
        .hOwner 
= hwnd
        .ulFlags 
= BIF_RETURNONLYFSDIRS Or BIF_USENEWUI Or BIF_EDITBOX
        .pidlRoot 
= 0
        
        .lpszTitle 
= IIf(Title <> "", Title & vbNullChar, "Select a folder:" & vbNullChar)
    
End With
  
    pidl 
= SHBrowseForFolder(bi)

    
If SHGetPathFromIDList(ByVal pidl, ByVal folder) Then
        BrowseFolder 
= Left(folder, InStr(folder, vbNullChar) - 1)
    
Else
        BrowseFolder 
= ""
    End If
End Function

posted on 2004-08-29 14:28  kempsun  阅读(665)  评论(0)    收藏  举报

导航