Public Const RESOURCE_GLOBALNET As Long = &H2& Public Const RESOURCEDISPLAYTYPE_DIRECTORY& = &H9 Public Const RESOURCEDISPLAYTYPE_NETWORK& = &H6 Public Const RESOURCEDISPLAYTYPE_ROOT& = &H7 Public Const RESOURCEDISPLAYTYPE_SHAREADMIN& = &H8 Public Const RESOURCETYPE_ANY As Long = &H0& Public Const RESOURCEUSAGE_ALL As Long = &H0& Public Const RESOURCEUSAGE_CONTAINER As Long = &H2& Public Const RESOURCEDISPLAYTYPE_SERVER& = &H2 Public Const RESOURCEDISPLAYTYPE_SHARE& = &H3 Public Const NO_ERROR = 0 Public Const ERROR_MORE_DATA = 234 'L // dderror Public Const RESOURCE_ENUM_ALL As Long = 100 '&HFFFF Public Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long pLocalName As Long pRemoteName As Long pComment As Long pProvider As Long End TypePublic Type NETRESOURCE_REAL dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long sLocalName As String sRemoteName As String sComment As String sProvider As String End TypePublic Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long) Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long Const MAX_RESOURCES = 256 Const NOT_A_CONTAINER = -1 Dim bFirstTime As Boolean Dim lReturn As Long Dim hEnum As Long Dim lCount As Long Dim lMin As Long Dim lLength As Long Dim l As Long Dim lBufferSize As Long Dim lLastIndex As Long Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE Dim uNet() As NETRESOURCE_REAL Dim temp As Long
On Error GoTo ErrHandle1 bFirstTime = True Do If bFirstTime Then lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum) bFirstTime = False Else If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum) Else lReturn = NOT_A_CONTAINER hEnum = 0 End If lLastIndex = lLastIndex + 1 End If If lReturn = NO_ERROR Then lCount = RESOURCE_ENUM_ALL Do lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2 lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize) If lCount > 0 Then ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE_REAL For l = 0 To lCount - 1 'Each Resource will appear here as uNet(i) uNet(lMin + l).dwScope = uNetApi(l).dwScope uNet(lMin + l).dwType = uNetApi(l).dwType uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType uNet(lMin + l).dwUsage = uNetApi(l).dwUsage If uNetApi(l).pLocalName Then lLength = lstrlen(uNetApi(l).pLocalName) uNet(lMin + l).sLocalName = Space$(lLength) CopyMem ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLength End If If uNetApi(l).pRemoteName Then lLength = lstrlen(uNetApi(l).pRemoteName) uNet(lMin + l).sRemoteName = Space$(lLength) CopyMem ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLength End If If uNetApi(l).pComment Then lLength = lstrlen(uNetApi(l).pComment) uNet(lMin + l).sComment = Space$(lLength) CopyMem ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLength End If If uNetApi(l).pProvider Then lLength = lstrlen(uNetApi(l).pProvider) uNet(lMin + l).sProvider = Space$(lLength) CopyMem ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLength End If Next l End If lMin = lMin + lCount Loop While lReturn = ERROR_MORE_DATA End If If hEnum Then l = WNetCloseEnum(hEnum) End If Loop While lLastIndex < lMin
If UBound(uNet) > 0 Then For l = 0 To UBound(uNet) Select Case uNet(l).dwDisplayType Case RESOURCEDISPLAYTYPE_DIRECTORY& Debug.Print "Directory...", Case RESOURCEDISPLAYTYPE_DOMAIN 'Debug.Print "Domain...", Case RESOURCEDISPLAYTYPE_FILE Debug.Print "File...", Case RESOURCEDISPLAYTYPE_GENERIC Debug.Print "Generic...", Case RESOURCEDISPLAYTYPE_GROUP Debug.Print "Group...", Case RESOURCEDISPLAYTYPE_NETWORK& Debug.Print "Network...", Case RESOURCEDISPLAYTYPE_ROOT& Debug.Print "Root...", Case RESOURCEDISPLAYTYPE_SERVER Debug.Print "Server Name " cobSendTo.AddItem uNet(l).sRemoteName Case RESOURCEDISPLAYTYPE_SHARE Debug.Print "Share Files" Case RESOURCEDISPLAYTYPE_SHAREADMIN& Debug.Print "ShareAdmin...", Case Else
End Select Debug.Print uNet(l).sRemoteName, uNet(l).sComment
[email protected]
[email protected]
Public Const RESOURCEDISPLAYTYPE_DIRECTORY& = &H9
Public Const RESOURCEDISPLAYTYPE_NETWORK& = &H6
Public Const RESOURCEDISPLAYTYPE_ROOT& = &H7
Public Const RESOURCEDISPLAYTYPE_SHAREADMIN& = &H8
Public Const RESOURCETYPE_ANY As Long = &H0&
Public Const RESOURCEUSAGE_ALL As Long = &H0&
Public Const RESOURCEUSAGE_CONTAINER As Long = &H2&
Public Const RESOURCEDISPLAYTYPE_SERVER& = &H2
Public Const RESOURCEDISPLAYTYPE_SHARE& = &H3
Public Const NO_ERROR = 0
Public Const ERROR_MORE_DATA = 234 'L // dderror
Public Const RESOURCE_ENUM_ALL As Long = 100 '&HFFFF
Public Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
pLocalName As Long
pRemoteName As Long
pComment As Long
pProvider As Long
End TypePublic Type NETRESOURCE_REAL
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
sLocalName As String
sRemoteName As String
sComment As String
sProvider As String
End TypePublic Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long
Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long
Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long)
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long Const MAX_RESOURCES = 256
Const NOT_A_CONTAINER = -1 Dim bFirstTime As Boolean
Dim lReturn As Long
Dim hEnum As Long
Dim lCount As Long
Dim lMin As Long
Dim lLength As Long
Dim l As Long
Dim lBufferSize As Long
Dim lLastIndex As Long
Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
Dim uNet() As NETRESOURCE_REAL
Dim temp As Long
'clear
lstShare.Clear
txtMessage.Text = ""
txtSign.Text = ""
cobSendTo.Clear
'create tray
Call CreateTray
On Error GoTo ErrHandle1
bFirstTime = True
Do
If bFirstTime Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
bFirstTime = False
Else
If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum)
Else
lReturn = NOT_A_CONTAINER
hEnum = 0
End If
lLastIndex = lLastIndex + 1
End If
If lReturn = NO_ERROR Then
lCount = RESOURCE_ENUM_ALL
Do
lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize)
If lCount > 0 Then
ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE_REAL
For l = 0 To lCount - 1
'Each Resource will appear here as uNet(i)
uNet(lMin + l).dwScope = uNetApi(l).dwScope
uNet(lMin + l).dwType = uNetApi(l).dwType
uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType
uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
If uNetApi(l).pLocalName Then
lLength = lstrlen(uNetApi(l).pLocalName)
uNet(lMin + l).sLocalName = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLength
End If
If uNetApi(l).pRemoteName Then
lLength = lstrlen(uNetApi(l).pRemoteName)
uNet(lMin + l).sRemoteName = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLength
End If
If uNetApi(l).pComment Then
lLength = lstrlen(uNetApi(l).pComment)
uNet(lMin + l).sComment = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLength
End If
If uNetApi(l).pProvider Then
lLength = lstrlen(uNetApi(l).pProvider)
uNet(lMin + l).sProvider = Space$(lLength)
CopyMem ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLength
End If
Next l
End If
lMin = lMin + lCount
Loop While lReturn = ERROR_MORE_DATA
End If
If hEnum Then
l = WNetCloseEnum(hEnum)
End If
Loop While lLastIndex < lMin
If UBound(uNet) > 0 Then
For l = 0 To UBound(uNet)
Select Case uNet(l).dwDisplayType
Case RESOURCEDISPLAYTYPE_DIRECTORY&
Debug.Print "Directory...",
Case RESOURCEDISPLAYTYPE_DOMAIN
'Debug.Print "Domain...",
Case RESOURCEDISPLAYTYPE_FILE
Debug.Print "File...",
Case RESOURCEDISPLAYTYPE_GENERIC
Debug.Print "Generic...",
Case RESOURCEDISPLAYTYPE_GROUP
Debug.Print "Group...",
Case RESOURCEDISPLAYTYPE_NETWORK&
Debug.Print "Network...",
Case RESOURCEDISPLAYTYPE_ROOT&
Debug.Print "Root...",
Case RESOURCEDISPLAYTYPE_SERVER
Debug.Print "Server Name "
cobSendTo.AddItem uNet(l).sRemoteName
Case RESOURCEDISPLAYTYPE_SHARE
Debug.Print "Share Files"
Case RESOURCEDISPLAYTYPE_SHAREADMIN&
Debug.Print "ShareAdmin...",
Case Else
End Select
Debug.Print uNet(l).sRemoteName, uNet(l).sComment
Next l
End If
谢谢啦
[email protected]
[email protected]
这里有:
http://www.csdn.net/cnshare/soft/16/16015.shtm