OptionExplicit
PrivateConstRESOURCE_CONNECTEDAsLong=&H1&
PrivateConstRESOURCE_GLOBALNETAsLong=&H2&
PrivateConstRESOURCE_REMEMBEREDAsLong=&H3&
PrivateConstRESOURCEDISPLAYTYPE_DIRECTORY&=&H9
PrivateConstRESOURCEDISPLAYTYPE_DOMAIN&=&H1
PrivateConstRESOURCEDISPLAYTYPE_FILE&=&H4
PrivateConstRESOURCEDISPLAYTYPE_GENERIC&=&H0
PrivateConstRESOURCEDISPLAYTYPE_GROUP&=&H5
PrivateConstRESOURCEDISPLAYTYPE_NETWORK&=&H6
PrivateConstRESOURCEDISPLAYTYPE_ROOT&=&H7
PrivateConstRESOURCEDISPLAYTYPE_SERVER&=&H2
PrivateConstRESOURCEDISPLAYTYPE_SHARE&=&H3
PrivateConstRESOURCEDISPLAYTYPE_SHAREADMIN&=&H8
PrivateConstRESOURCETYPE_ANYAsLong=&H0&
PrivateConstRESOURCETYPE_DISKAsLong=&H1&
PrivateConstRESOURCETYPE_PRINTAsLong=&H2&
PrivateConstRESOURCETYPE_UNKNOWNAsLong=&HFFFF&
PrivateConstRESOURCEUSAGE_ALLAsLong=&H0&
PrivateConstRESOURCEUSAGE_CONNECTABLEAsLong=&H1&
PrivateConstRESOURCEUSAGE_CONTAINERAsLong=&H2&
PrivateConstRESOURCEUSAGE_RESERVEDAsLong=&H80000000
PrivateConstNO_ERROR=0
PrivateConstERROR_MORE_DATA=234L//dderror
PrivateConstRESOURCE_ENUM_ALLAsLong=&HFFFF
PrivateTypeNETRESOURCE
dwScopeAsLong
dwTypeAsLong
dwDisplayTypeAsLong
dwUsageAsLong
pLocalNameAsLong
pRemoteNameAsLong
pCommentAsLong
pProviderAsLong
EndType
PrivateTypeNETRESOURCE_REAL
dwScopeAsLong
dwTypeAsLong
dwDisplayTypeAsLong
dwUsageAsLong
sLocalNameAsString
sRemoteNameAsString
sCommentAsString
sProviderAsString
EndType
PrivateDeclareFunctionWNetAddConnection2Lib”mpr.dll”Alias”WNetAddConnection2A”(lpNetResourceAsNETRESOURCE,ByVallpPasswordAsString,ByVallpUserNameAsString,ByValdwFlagsAsLong)AsLong
PrivateDeclareFunctionWNetOpenEnumLib”mpr.dll”Alias”WNetOpenEnumA”(ByValdwScopeAsLong,ByValdwTypeAsLong,ByValdwUsageAsLong,lpNetResourceAsAny,lphEnumAsLong)AsLong
PrivateDeclareFunctionWNetEnumResourceLib”mpr.dll”Alias”WNetEnumResourceA”(ByValhEnumAsLong,lpcCountAsLong,lpBufferAsNETRESOURCE,lpBufferSizeAsLong)AsLong
PrivateDeclareFunctionWNetCloseEnumLib”mpr.dll”(ByValhEnumAsLong)AsLong
PrivateDeclareFunctionVarPtrAnyLib”vb40032.dll”Alias”VarPtr”(lpObjectAsAny)AsLong
PrivateDeclareSubCopyMemLib”kernel32″Alias”RtlMoveMemory”(lpToAsAny,lpFromAsAny,ByVallLenAsLong)
PrivateDeclareSubCopyMemByPtrLib”kernel32″Alias”RtlMoveMemory”(ByVallpToAsLong,ByVallpFromAsLong,ByVallLenAsLong)
PrivateDeclareFunctionlstrcpyLib”kernel32″Alias”lstrcpyA”(ByVallpString1AsString,ByVallpString2AsAny)AsLong
PrivateDeclareFunctionlstrlenLib”kernel32″Alias”lstrlenA”(ByVallpStringAsAny)AsLong
Submain()
ConstMAX_RESOURCES=256
ConstNOT_A_CONTAINER=-1
DimbFirstTimeAsBoolean
DimlReturnAsLong
DimhEnumAsLong
DimlCountAsLong
DimlMinAsLong
DimlLengthAsLong
DimlAsLong
DimlBufferSizeAsLong
DimlLastIndexAsLong
DimuNetApi(0ToMAX_RESOURCES)AsNETRESOURCE
DimuNet()AsNETRESOURCE_REAL
bFirstTime=True
Do
IfbFirstTimeThen
lReturn=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_ALL,ByVal0&,hEnum)
bFirstTime=False
Else
IfuNet(lLastIndex).dwUsageAndRESOURCEUSAGE_CONTAINERThen
lReturn=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_ALL,uNet(lLastIndex),hEnum)
Else
lReturn=NOT_A_CONTAINER
hEnum=0
EndIf
lLastIndex=lLastIndex 1
EndIf
IflReturn=NO_ERRORThen
lCount=RESOURCE_ENUM_ALL
Do
lBufferSize=UBound(uNetApi)*Len(uNetApi(0))/2
lReturn=WNetEnumResource(hEnum,lCount,uNetApi(0),lBufferSize)
IflCount>0Then
ReDimPreserveuNet(0TolMin lCount-1)AsNETRESOURCE_REAL
Forl=0TolCount-1
EachResourcewillappearhereasuNet(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
IfuNetApi(l).pLocalNameThen
lLength=lstrlen(uNetApi(l).pLocalName)
uNet(lMin l).sLocalName=Space$(lLength)
CopyMemByValuNet(lMin l).sLocalName,ByValuNetApi(l).pLocalName,lLength
EndIf
IfuNetApi(l).pRemoteNameThen
lLength=lstrlen(uNetApi(l).pRemoteName)
uNet(lMin l).sRemoteName=Space$(lLength)
CopyMemByValuNet(lMin l).sRemoteName,ByValuNetApi(l).pRemoteName,lLength
EndIf
IfuNetApi(l).pCommentThen
lLength=lstrlen(uNetApi(l).pComment)
uNet(lMin l).sComment=Space$(lLength)
CopyMemByValuNet(lMin l).sComment,ByValuNetApi(l).pComment,lLength
EndIf
IfuNetApi(l).pProviderThen
lLength=lstrlen(uNetApi(l).pProvider)
uNet(lMin l).sProvider=Space$(lLength)
CopyMemByValuNet(lMin l).sProvider,ByValuNetApi(l).pProvider,lLength
EndIf
Nextl
EndIf
lMin=lMin lCount
LoopWhilelReturn=ERROR_MORE_DATA
EndIf
IfhEnumThen
l=WNetCloseEnum(hEnum)
EndIf
LoopWhilelLastIndex<lMin
IfUBound(uNet)>0Then
Forl=0ToUBound(uNet)
SelectCaseuNet(l).dwDisplayType
CaseRESOURCEDISPLAYTYPE_DIRECTORY&
Debug.Print”Directory…”,
CaseRESOURCEDISPLAYTYPE_DOMAIN
Debug.Print”Domain…”,
CaseRESOURCEDISPLAYTYPE_FILE
Debug.Print”File…”,
CaseRESOURCEDISPLAYTYPE_GENERIC
Debug.Print”Generic…”,
CaseRESOURCEDISPLAYTYPE_GROUP
Debug.Print”Group…”,
CaseRESOURCEDISPLAYTYPE_NETWORK&
Debug.Print”Network…”,
CaseRESOURCEDISPLAYTYPE_ROOT&
Debug.Print”Root…”,
CaseRESOURCEDISPLAYTYPE_SERVER
Debug.Print”Server…”,
CaseRESOURCEDISPLAYTYPE_SHARE
Debug.Print”Share…”,
CaseRESOURCEDISPLAYTYPE_SHAREADMIN&
Debug.Print”ShareAdmin…”,
EndSelect
Debug.PrintuNet(l).sRemoteName,uNet(l).sComment
Nextl
EndIf
EndSub->