📄 188.htm
字号:
<p>使用vb获取网上邻居里的计算机名</p>
<p></p>
<p>关键词:Visual Basic</p>
<p></p>
<p>Option Explicit</p>
<p>Private Const RESOURCE_CONNECTED As Long = &H1&</p>
<p>Private Const RESOURCE_GLOBALNET As Long = &H2&</p>
<p>Private Const RESOURCE_REMEMBERED As Long = &H3&</p>
<p></p>
<p>Private Const RESOURCEDISPLAYTYPE_DIRECTORY& = &H9</p>
<p>Private Const RESOURCEDISPLAYTYPE_DOMAIN& = &H1</p>
<p>Private Const RESOURCEDISPLAYTYPE_FILE& = &H4</p>
<p>Private Const RESOURCEDISPLAYTYPE_GENERIC& = &H0</p>
<p>Private Const RESOURCEDISPLAYTYPE_GROUP& = &H5</p>
<p>Private Const RESOURCEDISPLAYTYPE_NETWORK& = &H6</p>
<p>Private Const RESOURCEDISPLAYTYPE_ROOT& = &H7</p>
<p>Private Const RESOURCEDISPLAYTYPE_SERVER& = &H2</p>
<p>Private Const RESOURCEDISPLAYTYPE_SHARE& = &H3</p>
<p>Private Const RESOURCEDISPLAYTYPE_SHAREADMIN& = &H8</p>
<p>Private Const RESOURCETYPE_ANY As Long = &H0&</p>
<p>Private Const RESOURCETYPE_DISK As Long = &H1&</p>
<p>Private Const RESOURCETYPE_PRINT As Long = &H2&</p>
<p>Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFF&</p>
<p>Private Const RESOURCEUSAGE_ALL As Long = &H0&</p>
<p>Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&</p>
<p>Private Const RESOURCEUSAGE_CONTAINER As Long = &H2&</p>
<p>Private Const RESOURCEUSAGE_RESERVED As Long = &H80000000</p>
<p>Private Const NO_ERROR = 0</p>
<p>Private Const ERROR_MORE_DATA = 234 注释:L // dderror</p>
<p>Private Const RESOURCE_ENUM_ALL As Long = &HFFFF</p>
<p>Private Type NETRESOURCE</p>
<p> dwScope As Long</p>
<p> dwType As Long</p>
<p> dwDisplayType As Long</p>
<p> dwUsage As Long</p>
<p> pLocalName As Long</p>
<p> pRemoteName As Long</p>
<p> pComment As Long</p>
<p> pProvider As Long</p>
<p>End Type</p>
<p>Private Type NETRESOURCE_REAL</p>
<p> dwScope As Long</p>
<p> dwType As Long</p>
<p> dwDisplayType As Long</p>
<p> dwUsage As Long</p>
<p> sLocalName As String</p>
<p> sRemoteName As String</p>
<p> sComment As String</p>
<p> sProvider As String</p>
<p>End Type</p>
<p>Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long</p>
<p>Private 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</p>
<p>Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long</p>
<p>Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long</p>
<p>Private Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long</p>
<p>Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long)</p>
<p>Private Declare Sub CopyMemByPtr Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpTo As Long, ByVal lpFrom As Long, ByVal lLen As Long)</p>
<p>Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long</p>
<p>Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long</p>
<p></p>
<p>Sub main()</p>
<p> Const MAX_RESOURCES = 256</p>
<p> Const NOT_A_CONTAINER = -1</p>
<p></p>
<p> Dim bFirstTime As Boolean</p>
<p> Dim lReturn As Long</p>
<p> Dim hEnum As Long</p>
<p> Dim lCount As Long</p>
<p> Dim lMin As Long</p>
<p> Dim lLength As Long</p>
<p> Dim l As Long</p>
<p> Dim lBufferSize As Long</p>
<p> Dim lLastIndex As Long</p>
<p> Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE</p>
<p> Dim uNet() As NETRESOURCE_REAL</p>
<p> bFirstTime = True</p>
<p> Do</p>
<p> If bFirstTime Then</p>
<p> lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)</p>
<p> bFirstTime = False</p>
<p> Else</p>
<p> If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then</p>
<p> lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum)</p>
<p> Else</p>
<p> lReturn = NOT_A_CONTAINER</p>
<p> hEnum = 0</p>
<p> End If</p>
<p> lLastIndex = lLastIndex + 1</p>
<p> End If</p>
<p> If lReturn = NO_ERROR Then</p>
<p> lCount = RESOURCE_ENUM_ALL</p>
<p> Do</p>
<p> lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2</p>
<p> lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize)</p>
<p> If lCount > 0 Then</p>
<p> ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE_REAL</p>
<p> For l = 0 To lCount - 1</p>
<p> 注释:Each Resource will appear here as uNet(i)</p>
<p> uNet(lMin + l).dwScope = uNetApi(l).dwScope</p>
<p> uNet(lMin + l).dwType = uNetApi(l).dwType</p>
<p> uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType</p>
<p> uNet(lMin + l).dwUsage = uNetApi(l).dwUsage</p>
<p> If uNetApi(l).pLocalName Then</p>
<p> lLength = lstrlen(uNetApi(l).pLocalName)</p>
<p> uNet(lMin + l).sLocalName = Space$(lLength)</p>
<p> CopyMem ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLength</p>
<p> End If</p>
<p> If uNetApi(l).pRemoteName Then</p>
<p> lLength = lstrlen(uNetApi(l).pRemoteName)</p>
<p> uNet(lMin + l).sRemoteName = Space$(lLength)</p>
<p> CopyMem ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLength</p>
<p> End If</p>
<p> If uNetApi(l).pComment Then</p>
<p> lLength = lstrlen(uNetApi(l).pComment)</p>
<p> uNet(lMin + l).sComment = Space$(lLength)</p>
<p> CopyMem ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLength</p>
<p> End If</p>
<p> If uNetApi(l).pProvider Then</p>
<p> lLength = lstrlen(uNetApi(l).pProvider)</p>
<p> uNet(lMin + l).sProvider = Space$(lLength)</p>
<p> CopyMem ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLength</p>
<p> End If</p>
<p> Next l</p>
<p> End If</p>
<p> lMin = lMin + lCount</p>
<p> Loop While lReturn = ERROR_MORE_DATA</p>
<p> End If</p>
<p> If hEnum Then</p>
<p> l = WNetCloseEnum(hEnum)</p>
<p> End If</p>
<p> Loop While lLastIndex < lMin</p>
<p> If UBound(uNet) > 0 Then</p>
<p> For l = 0 To UBound(uNet)</p>
<p> Select Case uNet(l).dwDisplayType</p>
<p> Case RESOURCEDISPLAYTYPE_DIRECTORY&</p>
<p> Debug.Print "Directory...",</p>
<p> Case RESOURCEDISPLAYTYPE_DOMAIN</p>
<p> Debug.Print "Domain...",</p>
<p> Case RESOURCEDISPLAYTYPE_FILE</p>
<p> Debug.Print "File...",</p>
<p> Case RESOURCEDISPLAYTYPE_GENERIC</p>
<p> Debug.Print "Generic...",</p>
<p> Case RESOURCEDISPLAYTYPE_GROUP</p>
<p> Debug.Print "Group...",</p>
<p> Case RESOURCEDISPLAYTYPE_NETWORK&</p>
<p> Debug.Print "Network...",</p>
<p> Case RESOURCEDISPLAYTYPE_ROOT&</p>
<p> Debug.Print "Root...",</p>
<p> Case RESOURCEDISPLAYTYPE_SERVER</p>
<p> Debug.Print "Server...",</p>
<p> Case RESOURCEDISPLAYTYPE_SHARE</p>
<p> Debug.Print "Share...",</p>
<p> Case RESOURCEDISPLAYTYPE_SHAREADMIN&</p>
<p> Debug.Print "ShareAdmin...",</p>
<p> End Select</p>
<p> Debug.Print uNet(l).sRemoteName, uNet(l).sComment</p>
<p> Next l</p>
<p> End If</p>
<p>End Sub</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -