想通过api 获取路径,怎么实现?shell32里的那两个sh打头的函数在shell32里找不到,不能用!怎么办?谢谢各位了!

解决方案 »

  1.   

    Const CSIDL_DESKTOPDIRECTORY = &H10
    Const CSIDL_WINDOWS = &H24Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
    Private Type SHITEMID
        cb As Long
        abID As Byte
    End Type
    Private Type ITEMIDLIST
        mkid As SHITEMID
    End Type
    Private Function GetWindowsDirectory() As String
    Dim R As Long, IDL As ITEMIDLIST, sPath As String
        R = SHGetSpecialFolderLocation(100, CSIDL_WINDOWS, IDL)
        If R = 0 Then        sPath = Space(512)        R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)        GetWindowsDirectory = Left(sPath, InStr(sPath, Chr(0)) - 1)
        Else
            GetWindowsDirectory = ""
        End If
    End Function
      

  2.   

    下面是一个例子,在窗体中放置一个命令按钮command1、一个文本框Text1,在窗体的声明部分API声明函数和类型及常量如下:Option Explicit
    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
    Const BIF_RETURNONLYFSDIRS = &H1
    Private pidl As Long
    Private Declare Function
    SHGetPathFromIDList _
    Lib "shell32.dll" Alias
    "SHGetPathFromIDListA" _
    (ByVal pidl As Long, ByVal
    pszPath As String) As Long
    Private Declare Function
    SHBrowseForFolder Lib "shell32.dll" _
    Alias "SHBrowseForFolderA" _
    (lpBrowseInfo As BROWSEINFO) As Long
      双击命令按钮,写如下代码:Private Sub command1_Click()
    Dim bi As BROWSEINFO
    Dim r As Long
    Dim pidl As Long
    Dim path As String
    Dim pos As Integer
      句柄  bi.hOwner = Me.hWnd  展开根目录  bi.pidlRoot = 0&  列表框标题  bi.lpszTitle = "请选择软件安装路径:"  规定只能选择文件夹,其他无效bi.ulFlags = BIF_RETURNONLYFSDIRS
      调用API函数显示列表框pidl = SHBrowseForFolder(bi)
      利用API函数获取返回的路径  
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal pidl&, ByVal path)
    If r Then
    pos = InStr(path, Chr$(0))
    Text1 = Left(path, pos - 1)
    Else: Text1 = ""
    End If
    End Sub  运行此程序,单击命令按钮,就可以看到和资源管理器中一样的“所有文件夹”列表了。
      

  3.   

    俺没有在api找到这么个函数呀!而且试过了!说是shell32中没找到函数