`
isiqi
  • 浏览: 16356591 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

vb 带新建文件夹的文件夹浏览窗口 BrowseForFolder

阅读更多

感谢 Zezese(蓝酷云) 同学

http://topic.csdn.net/t/20050807/23/4194587.html

Option Explicit

Private Type BROWSEINFOTYPE
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 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 Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBROWSEINFOTYPE As BROWSEINFOTYPE) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) 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 Const WM_USER = &H400
Private Const BFFM_SETSELECTIONA As Long = (WM_USER + 102)
Private Const BFFM_SETSELECTIONW As Long = (WM_USER + 103)
Private Const LPTR = (&H0 Or &H40)

Public Enum BROWSETYPE
NONE = 0
PATHTEXT = 16
NEWFOLDER = 64
End Enum

Private Sub BrowseCallbackProcStr(ByVal hwnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long)
If uMsg = 1 Then
Call SendMessage(hwnd, BFFM_SETSELECTIONA, True, ByVal lpData)
End If
End Sub

Private Function FunctionPointer(FunctionAddress As Long) As Long
FunctionPointer = FunctionAddress
End Function

Public Function BrowseForFolder(ByVal hwnd As Long, ByVal strTitle As String, Optional selectedPath As String, Optional ByVal Flag As BROWSETYPE = 0) As String
Dim Browse_for_folder As BROWSEINFOTYPE
Dim itemID As Long
Dim selectedPathPointer As Long
Dim tmpPath As String * 256

If selectedPath = "" Then selectedPath = "" '避免selectedPath未初始化而出错

If Not Right(selectedPath, 1) <> "\" Then
selectedPath = Left(selectedPath, Len(selectedPath) - 1) '如果用户加了 "\" 则删除
End If

With Browse_for_folder
.hOwner = hwnd '所有都窗口之句柄
.lpszTitle = strTitle '对话框的标题
.ulFlags = Flag
.lpfn = FunctionPointer(AddressOf BrowseCallbackProcStr) '用于设置预设文件夹的回调函数
selectedPathPointer = LocalAlloc(LPTR, Len(selectedPath) + 1) '分配一个字符串内存
Call CopyMemory(ByVal selectedPathPointer, ByVal selectedPath, Len(selectedPath) + 1) ' 拷贝那个路径到内存
.lParam = selectedPathPointer ' 预设的文件夹
End With
itemID = SHBrowseForFolder(Browse_for_folder) '执行API函数:BrowseForFolder
If itemID Then
If SHGetPathFromIDList(itemID, tmpPath) Then '取得选定的文件夹
BrowseForFolder = Left(tmpPath, InStr(tmpPath, vbNullChar) - 1) '去掉多余的 null 字符
End If
Call CoTaskMemFree(itemID) '释放内存
End If
Call LocalFree(selectedPathPointer) '释放内存
End Function

分享到:
评论

相关推荐

    VB6选择文件夹模块(完整版)

    这个"VB6选择文件夹模块(完整版)"提供的功能就是实现这一目标,通过一个简洁的模块和函数调用来实现弹出式文件夹浏览对话框。 首先,我们需要了解VB6中的“模块”。在VB6中,模块是存储过程、函数、变量和常量等...

    VB6选取文件夹

    在VB6(Visual Basic 6)中,选取文件夹是一个常见的功能,用于让用户在操作系统中选择一个特定的文件夹路径。这个功能对于许多应用程序来说都非常重要,比如保存或读取文件、备份数据或者进行文件操作时。下面我们...

    vb中5种打开文件夹浏览框的方法总结.doc

    "VB 中 5 种打开文件夹浏览框的方法总结" VB 中打开文件夹浏览框有多种方法,本文总结了其中的 5 种常见方法。下面分别对每种方法进行详细介绍。 方法一:使用 Shell 对象 使用 Shell 对象可以轻松实现文件夹浏览...

    BrowseForFolder参数详解图片

    这个函数允许用户在操作系统中浏览并选择一个文件夹,然后返回所选文件夹的路径。`BrowseForFolder`通常在浏览器扩展、桌面应用程序或者Node.js环境中使用,它提供了用户友好的界面来获取文件夹路径。 `...

    vb读取文件夹的文件.pdf

    VB 读取文件夹的文件 VB 读取文件夹的文件是 VB 编程中的一种常见操作,下面将详细介绍两种实现方法。 方法一:使用 Shell 对象和 FileListBox 控件 在这个方法中,我们使用 Shell 对象和 FileListBox 控件来读取...

    vb读取文件夹的文件[定义].pdf

    `Shell`对象是VB中用于与Windows Shell交互的接口,而`BrowseForFolder`函数则用于打开一个文件夹选择对话框,让用户选择一个文件夹。在代码中,我们首先创建`Shell`对象`objDlg`,然后调用`BrowseForFolder`函数,...

    vb读取文件夹的文件[收集].pdf

    在VB编程中,读取文件夹的文件是一个常见的任务,特别是在软件开发中。本文将详细介绍两种不同的方法来实现这一功能。 首先,我们可以使用VB的内置控件和对象来实现文件的读取。第一种方法涉及动态加载控件,具体...

    matlab guide 选择文件夹

    这是一个Windows API中的函数库,它提供了浏览和选择文件夹的功能。MATLAB可以通过`calllib`或`win32com.client.Dispatch`等函数来调用这个DLL,从而在程序中实现文件夹选择对话框。`browseforfolder.dll`的核心函数...

    Shell对象实现文件夹浏览对话框[归类].pdf

    Shell对象中的`BrowseForFolder`方法是实现文件夹浏览对话框的关键。这个方法会弹出一个标准的Windows文件夹选择对话框,用户可以选择一个文件夹,方法的参数如下: 1. `Hwnd`: 指定对话框的父窗口句柄,通常设置为...

    browseforfolder:用于文件夹浏览的增强对话框。-matlab开发

    UIBROWSEFORFOLDER 标准 Windows 浏览文件夹对话框。 文件夹 = uibrowseforfolder( title_str, initial_path ) 输出:文件夹 = 选定的文件夹(如果对话框取消则为空字符串) 输入:title_str = 标题字符串(可选)...

    vb用程序制作打开对话框

    根据给定的信息,本文将详细解释如何在Visual Basic(简称VB)中创建一个打开对话框,该对话框能够返回用户选定的文件夹路径。通过分析提供的代码片段,我们可以了解到具体的实现方法。 ### 标题:“vb用程序制作...

    jsp选择文件夹路径

    因此,解决方案主要依赖于前端技术,特别是JavaScript脚本语言以及IE浏览器提供的特定API——`Shell.BrowseForFolder`方法。下面将详细介绍这一方法的使用过程及其在实际项目中的具体实现。 #### 实现步骤 1. **...

    js 浏览本地文件夹系统示例代码

    然而,通过ActiveXObject,这个仅在Internet Explorer中可用的功能,我们可以实现一些特定的本地系统交互,如浏览和选择本地文件夹。在给定的代码示例中,`BrowseFolder()`函数就是用来实现这个功能。 首先,让我们...

    VBA'提取文件夹下所有文件名[张志晨]

    - **路径初始化**:通过`BrowseForFolder`方法让用户选择文件夹,确保路径正确无误。 - **文件名读取**:使用`Dir`函数读取文件夹下的文件名,通过循环将每个文件名依次写入Excel表格的A列中。 - **异常处理**:通过...

    精彩编程参阅资料指定文件夹...

    根据提供的标题、描述、标签及部分内容,我们可以了解到这段资料主要涉及的是使用Visual Basic(简称VB)进行编程,具体是关于创建一个浏览文件夹对话框的功能。以下是对这些内容的详细解读与扩展: ### VB编程中...

    jsp_选择文件夹的路径

    这种方法可以通过`Shell.BrowseForFolder()`函数来弹出一个文件夹选择对话框,让用户选择一个文件夹。此方法适用于Windows平台,但在部署时需要注意浏览器的安全设置。 **步骤一:创建JavaScript文件** 首先,需要...

    js选择文件夹

    该方法通过创建一个ActiveX对象(`Shell.Application`),利用其提供的方法`BrowseForFolder`来弹出系统文件夹选择对话框,并获取用户选定的文件夹路径。 #### 二、代码分析 ##### 1. HTML结构 HTML部分定义了一...

    调用接口弹出选择文件夹的对话框的软件源码

    本段代码展示了一个完整的VB函数`BrowseForFolder`,该函数通过调用Windows API来弹出一个文件夹选择对话框,并返回用户所选文件夹的路径。下面是该代码的关键部分及其解释: ```vb Option Explicit '=============...

Global site tag (gtag.js) - Google Analytics