不知道,不過在不知道的情況下可以做一個變通
 GetWindowsDirectory 不是可以知道Windows的路徑嗎?一般Program Fiels是和Windows在同一個路徑

解决方案 »

  1.   

    CSIDL_PROGRAMS = &H2&
    这个就是Program Fiels的路径标示,Common没有,但他一定在Program Fiels下。'**********获得系统特殊目录**********************
    Type SHITEMID
        cb As Long
        abID As Byte
    End TypePublic Type ITEMIDLIST  'idl
        mkid As SHITEMID
    End Type#If UNICODE Then
        Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListW" (ByVal pidl As Long, ByVal szPath As Long) As Long
    #Else
        Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
    #End IfPrivate Declare Function SHGetSpecialFolderLocation Lib "SHELL32.DLL" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As LongPublic Const MAX_PATH = 255
    'Public Const MAX_NAME = 40
    Private Const NOERROR = 0
    Public Function BrowseFolder(ByVal st As String, ctl As Form) As String
    Dim BI As BROWSEINFO
    Dim idl As ITEMIDLIST
    Dim rtn&, pidl&, sPath$
        
        BI.hOwner = ctl.hwnd
        rtn& = SHGetSpecialFolderLocation(ByVal BI.hOwner, CSIDL_PROGRAMS, idl)
        BI.pidlRoot = idl.mkid.cb
        BI.lpszTitle = st
        BI.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_BROWSEFORCOMPUTER Or BIF_EDITBOX
        pidl& = SHBrowseForFolder(BI)
        sPath$ = Space$(512)
        rtn& = SHGetPathFromIDList(ByVal pidl&, ByVal sPath$)
        If rtn& Then
        BrowseFolder = StripTerminator(sPath$)
        Else
        BrowseFolder = ""
        End If
    End Function
    Private Function StripTerminator(ByVal sInput As String) As String    Dim ZeroPos As Integer
        ZeroPos = InStr(1, sInput, vbNullChar)
        If ZeroPos > 0 Then
            StripTerminator = Left$(sInput, ZeroPos - 1)
        Else
            StripTerminator = sInput
        End If
        
    End Function
      

  2.   

    我要的是PROGRAM FILES以及COMMON FILES的路径,这个SHGetSpecialFolderLocation(100, &2, IDL)的显示结果是 "c:\win98\program"
      

  3.   

    Public Const CSIDL_PROGRAM_FILES = &H0026
    Public Const CSIDL_PROGRAM_FILES_COMMON = &H002b
    搞错了,使这两个!