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
这个就是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
Public Const CSIDL_PROGRAM_FILES_COMMON = &H002b
搞错了,使这两个!