上一篇 | 下一篇

利用ShellAPI函数弹出文件夹浏览窗口

发布: 2008-7-15 14:41 | 作者: 网络转载 | 来源: 网络转载 | 查看: 12次

'这个程序演示利用Shell API函数弹出文件夹浏览窗口

'

'作者 陈锐

'EMail develope@163.net

' blackcat@nease.net

'WebSite http://vbtip.syeah.net

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _

"SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SHGetSpecialFolderLocation Lib _

"shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder _

As Long, pIdl As ITEMIDLIST) As Long

Private Declare Function SHGetFileInfo Lib "Shell32" Alias _

"SHGetFileInfoA" (ByVal pszPath As Any, ByVal _

dwFileAttributes As Long, psfi As SHFILEINFO, ByVal _

cbFileInfo As Long, ByVal uFlags As Long) As Long

Private Declare Function ShellAbout Lib "shell32.dll" Alias _

"ShellAboutA" (ByVal hwnd As Long, ByVal szApp As _

String, ByVal szOtherStuff As String, ByVal hIcon As Long) _

As Long

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _

Alias "SHGetPathFromIDListA" (ByVal pIdl As Long, ByVal _

pszPath As String) As Long

Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

Const MAX_PATH = 260

Private Type SHITEMID

cb As Long

abID() As Byte

End Type

Private Type ITEMIDLIST

mkid As SHITEMID

End Type

Private 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 Long

End Type

Private Type SHFILEINFO

hIcon As Long

iIcon As Long

dwAttributes As Long

szDisplayName As String * MAX_PATH

szTypeName As String * 80

End Type

Private Function GetFolderValue(wIdx As Integer) As Long

If wIdx < 2 Then

GetFolderValue = 0

ElseIf wIdx < 12 Then

GetFolderValue = wIdx

Else

GetFolderValue = wIdx + 4

End If

End Function

Private Sub Command1_Click()

Dim BI As BROWSEINFO

Dim nFolder As Long

Dim IDL As ITEMIDLIST

Dim pIdl As Long

Dim sPath As String

Dim SHFI As SHFILEINFO

Dim m_wCurOptIdx As Integer

Dim txtPath As String

Dim txtDisplayName As String

With BI

.hOwner = Me.hwnd

nFolder = GetFolderValue(m_wCurOptIdx)

If SHGetSpecialFolderLocation(ByVal Me.hwnd, ByVal nFolder, IDL) = NOERROR Then

.pidlRoot = IDL.mkid.cb

End If

.pszDisplayName = String$(MAX_PATH, 0)

.lpszTitle = "Browsing is limited to: "

.ulFlags = 0

End With

txtPath = ""

txtDisplayName = ""

pIdl = SHBrowseForFolder(BI)

If pIdl = 0 Then Exit Sub

sPath = String$(MAX_PATH, 0)

SHGetPathFromIDList ByVal pIdl, ByVal sPath

txtPath = Left(sPath, InStr(sPath, vbNullChar) - 1)

txtDisplayName = Left$(BI.pszDisplayName, _

InStr(BI.pszDisplayName, vbNullChar) - 1)

SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _

SHGFI_PIDL Or SHGFI_ICON Or SHGFI_SMALLICON

SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _

SHGFI_PIDL Or SHGFI_ICON

CoTaskMemFree pIdl

MsgBox "你选择的文件夹是" + Chr(13) + Chr(10) + txtPath

End Sub

TAG: 函数 文件 ShellAPI 窗口 浏览

字号: | 推荐给好友

评分:0

我来说两句

网络推荐