指定文件夹

  • 来源: 互联网 作者: rocket   2008-03-18/09:17
  • 大家看仔细了,是指定文件夹,不是指定文件。指定文件夹很简单,用通用对话框就行了。但是指定文件就不同了。下面是
    实现的方法。

    声明

    Private Type BrowseInfo
         hWndOwner As Long
         pIDLRoot As Long
         pszDisplayName As Long
         lpszTitle As Long
         ulFlags As Long
         lpfnCallback As Long
         lParam As Long
         iImage As Long
    End Type

    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const MAX_PATH = 260



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

    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long

    Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long

    Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long

    代码

    Public Function BrowseForFolder(hWndOwner As Long, sPrompt As String) As String

    Dim iNull As Integer
    Dim lpIDList As Long
    Dim lResult As Long
    Dim sPath As String
    Dim udtBI As BrowseInfo


        With udtBI
            .hWndOwner = hWndOwner
            .lpszTitle = lstrcat(sPrompt, "")
            .ulFlags = BIF_RETURNONLYFSDIRS
        End With

        lpIDList = SHBrowseForFolder(udtBI)

        If lpIDList Then
            sPath = String$(MAX_PATH, 0)
           lResult = SHGetPathFromIDList(lpIDList, sPath)
            Call CoTaskMemFree(lpIDList)
            iNull = InStr(sPath, vbNullChar)

            If iNull Then
                sPath = Left$(sPath, iNull - 1)
            End If

        End If

        BrowseForFolder = sPath

    End Function

    用法

    sDirectoryName = BrowseForFolder(Me.hWnd, "请选择目录")

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多