Dim BI As BROWSEINFO Dim nFolder As Long Dim IDL As ITEMIDLIST Dim pIdl As Long Dim sPath As String With BI .hOwner = Me.hwnd nFolder = CSIDL_NETWORK '网络邻居 If SHGetSpecialFolderLocation(ByVal Me.hwnd, ByVal nFolder, IDL) = NOERROR Then .pidlRoot = IDL.mkid.cb End If
相关API声明如下 Option ExplicitPublic gstrPath As String Public gblnPathChanged As BooleanPublic Const MAX_PATH = 260Type SHITEMID ' mkid cb As Long ' Size of the ID (including cb itself) abID() As Byte ' The item ID (variable length) End TypeType ITEMIDLIST ' idl mkid As SHITEMID End TypeDeclare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _ (ByVal pIdl As Long, ByVal pszPath As String) As LongDeclare Function SHGetSpecialFolderLocation Lib "shell32.dll" _ (ByVal hwndOwner As Long, ByVal nFolder As Long, _ pIdl As ITEMIDLIST) As LongPublic Const NOERROR = 0Public Const CSIDL_DESKTOP = &H0 Public Const CSIDL_PROGRAMS = &H2 Public Const CSIDL_CONTROLS = &H3Public Const CSIDL_PRINTERS = &H4 Public Const CSIDL_PERSONAL = &H5 ' (Documents folder) Public Const CSIDL_FAVORITES = &H6 Public Const CSIDL_STARTUP = &H7 Public Const CSIDL_RECENT = &H8 ' (Recent folder) Public Const CSIDL_SENDTO = &H9 Public Const CSIDL_BITBUCKET = &HA Public Const CSIDL_STARTMENU = &HBPublic Const CSIDL_DESKTOPDIRECTORY = &H10 Public Const CSIDL_DRIVES = &H11Public Const CSIDL_NETWORK = &H12Public Const CSIDL_NETHOOD = &H13Public Const CSIDL_FONTS = &H14Public Const CSIDL_TEMPLATES = &H15 ' (ShellNew folder) Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _ (lpBrowseInfo As BROWSEINFO) As Long ' ITEMIDLISTPublic Type BROWSEINFO ' bi
Dim nFolder As Long
Dim IDL As ITEMIDLIST
Dim pIdl As Long
Dim sPath As String
With BI
.hOwner = Me.hwnd
nFolder = CSIDL_NETWORK '网络邻居
If SHGetSpecialFolderLocation(ByVal Me.hwnd, ByVal nFolder, IDL) = NOERROR Then
.pidlRoot = IDL.mkid.cb
End If
.pszDisplayName = String$(MAX_PATH, 0)
.lpszTitle = "网络文件夹:"
.ulFlags = 0
End With
' 显示对话框
pIdl = SHBrowseForFolder(BI)
If pIdl = 0 Then Exit Sub
sPath = String$(MAX_PATH, 0)
SHGetPathFromIDList ByVal pIdl, ByVal sPath
If Trim(sPath) <> " " Then txtPath = Left(sPath, InStr(sPath, vbNullChar) - 1)
Option ExplicitPublic gstrPath As String
Public gblnPathChanged As BooleanPublic Const MAX_PATH = 260Type SHITEMID ' mkid
cb As Long ' Size of the ID (including cb itself)
abID() As Byte ' The item ID (variable length)
End TypeType ITEMIDLIST ' idl
mkid As SHITEMID
End TypeDeclare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pIdl As Long, ByVal pszPath As String) As LongDeclare Function SHGetSpecialFolderLocation Lib "shell32.dll" _
(ByVal hwndOwner As Long, ByVal nFolder As Long, _
pIdl As ITEMIDLIST) As LongPublic Const NOERROR = 0Public Const CSIDL_DESKTOP = &H0
Public Const CSIDL_PROGRAMS = &H2
Public Const CSIDL_CONTROLS = &H3Public Const CSIDL_PRINTERS = &H4
Public Const CSIDL_PERSONAL = &H5 ' (Documents folder)
Public Const CSIDL_FAVORITES = &H6
Public Const CSIDL_STARTUP = &H7
Public Const CSIDL_RECENT = &H8 ' (Recent folder)
Public Const CSIDL_SENDTO = &H9
Public Const CSIDL_BITBUCKET = &HA
Public Const CSIDL_STARTMENU = &HBPublic Const CSIDL_DESKTOPDIRECTORY = &H10
Public Const CSIDL_DRIVES = &H11Public Const CSIDL_NETWORK = &H12Public Const CSIDL_NETHOOD = &H13Public Const CSIDL_FONTS = &H14Public Const CSIDL_TEMPLATES = &H15 ' (ShellNew folder)
Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long ' ITEMIDLISTPublic Type BROWSEINFO ' bi
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As LongEnd TypePublic Const BIF_RETURNONLYFSDIRS = &H1Public Const BIF_DONTGOBELOWDOMAIN = &H2Public Const BIF_STATUSTEXT = &H4Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_BROWSEFORCOMPUTER = &H1000Public Const BIF_BROWSEFORPRINTER = &H2000
当映射网络驱动器时,默认的盘符为最大的非cdrom,只要判断一下就可以了,不知道是否可行