Private Sub Command1_Click()
Dim a As New Shell32.Shell
Dim b As folder
Set b = a.BrowseForFolder(0, "选择文件夹", 0)
Dim str As String
str = b.Items.Item.Path
End Sub先在projects菜单下的references中把Microsoft Shell Controls And Automation勾上。然后运行时指定路径到桌面或者按了取消按钮就报实时错误91,指定别的路径确定均不报错,请问高手该怎么改一下?
Dim a As New Shell32.Shell
Dim b As folder
Set b = a.BrowseForFolder(0, "选择文件夹", 0)
Dim str As String
str = b.Items.Item.Path
End Sub先在projects菜单下的references中把Microsoft Shell Controls And Automation勾上。然后运行时指定路径到桌面或者按了取消按钮就报实时错误91,指定别的路径确定均不报错,请问高手该怎么改一下?
解决方案 »
- VB 做了个小软件,主面板窗体代码里面用了end,偶尔关不掉程序,在任务管理器中还可以看到,不知道为什么
- 50分求助,如何让程序屏蔽XP系统的热键,像CTRL+ALT+DEL
- 全局变量的使用????????
- 散尽身家 求一个答案
- 请问如何创建数据视图? 我用的是ACCESS数据库,拜托在线的高手回答一下。
- 如何把SQLSerevr2000中的数据导入Sybase,请高手指教!
- 一个关于API的问题
- 一个小问题,请大家帮忙!!!
- 怎样在VB中运行另一个应用程序,急急急急!!!
- 请诸位帮助我解决数据库编程的一个问题
- 怎么获取获取CommonDialog1.FileName的路径???
- 送分100分:如何解决某一程序运行时老是提示安装OFFICE?
Dim i As Integer
For i = 0 To b.Items.Count - 1
Debug.Print b.Items.Item(i).Path
Next
Dim a As New Shell32.Shell
Dim b As folder
On Error Resume Next
Set b = a.BrowseForFolder(0, "选择文件夹", 0)
Dim str As String
str = b.Items.Item.Path
End Sub
If Not b.Items.Item Is Nothing Then str = b.Items.Item.Path
End If
Private Sub Command1_Click()
Dim a As New Shell32.Shell
Dim b As Folder
Set b = a.BrowseForFolder(0, "选择文件夹", 0)
Dim i As Integer
For i = 0 To b.Items.Count - 1
Debug.Print b.Items.Item(i).Path
NextEnd Sub
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As LongEnd TypePrivate Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) 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)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
'Private Declare Function SHSimpleIDListFromPath Lib "shell32" Alias "#162" (ByVal szPath As String) As Long
Private Declare Function LocalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal uBytes As Long) As Long
Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrcpyA Lib "kernel32" (lpString1 As Any, lpString2 As Any) As Long
Private Declare Function lstrlenA Lib "kernel32" (lpString As Any) As LongPrivate Const MAX_PATH = 260Private Const BFFM_INITIALIZED = 1
Private Const WM_USER = &H400
'Private Const BFFM_SETSTATUSTEXTA As Long = (WM_USER + 100)
'Private Const BFFM_SETSTATUSTEXTW As Long = (WM_USER + 104)
'Private Const BFFM_ENABLEOK As Long = (WM_USER + 101)
Private Const BFFM_SETSELECTIONA As Long = (WM_USER + 102)
'Private Const BFFM_SETSELECTIONW As Long = (WM_USER + 103)Private Const LMEM_FIXED = &H0
Private Const LMEM_ZEROINIT = &H40
Private Const lPtr = (LMEM_FIXED Or LMEM_ZEROINIT)Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_USENEWUI = &H40
'Private Const BIF_STATUSTEXT = &H4
Private Const BIF_EDITBOX = &H10'-------------------------------------------
' 目录选择窗(允许指定初始目录)
'-------------------------------------------
Public Function BrowseForFolder(Optional ByVal hWndOwner As Long, Optional ByVal sTitle As String = "请选择文件夹:", Optional ByVal sSelPath As String = "c:\", Optional NewFolder As Boolean = False) As String Dim BI As BROWSEINFO
Dim pidl As Long
Dim lpSelPath As Long
Dim sPath As String * MAX_PATH If Len(sSelPath) > 0 Then sSelPath = Replace(sSelPath & "\", "\\", "\") With BI
.hOwner = hWndOwner
.pidlRoot = 0
.lpszTitle = sTitle
.lpfn = FARPROC(AddressOf BrowseCallbackProcStr)
lpSelPath = LocalAlloc(lPtr, Len(sSelPath))
MoveMemory ByVal lpSelPath, ByVal sSelPath, Len(sSelPath)
.lParam = lpSelPath
.ulFlags = IIf(NewFolder, BIF_USENEWUI, BIF_RETURNONLYFSDIRS) Or BIF_EDITBOX End With pidl = SHBrowseForFolder(BI) If pidl Then
If SHGetPathFromIDList(pidl, sPath) Then
BrowseForFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)
End If Call CoTaskMemFree(pidl)
End If Call LocalFree(lpSelPath) 'If cancel was pressed, sPath = ""
If Len(BrowseForFolder) > 0 Then
BrowseForFolder = Replace(BrowseForFolder & "\", "\\", "\")
End IfEnd FunctionPrivate Function BrowseCallbackProcStr(ByVal hwnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long Select Case uMsg Case BFFM_INITIALIZED
Call SendMessage(hwnd, BFFM_SETSELECTIONA, 1, ByVal StrFromPtrA(lpData)) 'Call PostMessage(hwnd, BFFM_SETSELECTIONA, 1, ByVal StrFromPtrA(lpData))
Case Else
End SelectEnd FunctionPrivate Function FARPROC(ByVal pfn As Long) As Long FARPROC = pfn
End FunctionPrivate Function StrFromPtrA(ByVal lpszA As Long) As String Dim sRtn As String
sRtn = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal sRtn, ByVal lpszA)
StrFromPtrA = sRtnEnd Function