如何获取局域网中所有的计算机名称
如何获取局域网中所有计算机名称以及IP地址....在网络上查找了些代码,运行后获取不到,大家帮忙来看看吧
--------------------编程问答-------------------- 肯定不是干什么好事 --------------------编程问答--------------------
Private Const RESOURCETYPE_ANY As Long = &H0&
Private Const RESOURCETYPE_DISK As Long = &H1&
Private Const RESOURCETYPE_PRINT As Long = &H2&
Private Const RESOURCETYPE_UNKNOWN As Long = &HFFFF&
Private Const RESOURCEUSAGE_ALL As Long = &H0&
Private Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&
Private Const RESOURCEUSAGE_CONTAINER As Long = &H2&
Private Const RESOURCEUSAGE_RESERVED As Long = &H80000000
Private Const NO_ERROR = 0
Private Const ERROR_MORE_DATA = 234 'l // dderror
Private Const RESOURCE_ENUM_ALL As Long = &HFFFF
Private 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 Type
Private Type Netresource_BUf
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 Type
Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Private Declare Function ValidateRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "rtlmovememory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long)
Private Declare Sub CopyMemByPtr Lib "kernel32" Alias "rtlmovememory" (ByVal lpTo As Long, ByVal lpFrom As Long, ByVal lLen As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpya" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlena" (ByVal lpString As Any) As Long
Private Declare Function getusername Lib "advapi32.dll " Alias "GetUserNameA " (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Form_Load()
On Error Resume Next
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_BUf
bFirstTime = True
Do
If bFirstTime Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNetApi(0), hEnum)
bFirstTime = False
Else
If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNetApi(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_BUf '以前是netresourece
For l = 0 To lCount - 1
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
Next l
End If
lMin = lMin + lCount
Loop While lReturn = ERROR_MORE_DATA
End If
If hEnum Then l = WNetCloseEnum(hEnum)
Loop While lLastIndex < lMin
'If UBound(uNet) > 0 Then
' For l = 0 To UBound(uNet)
' If uNet(l).dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then List1.AddItem uNet(l).sRemoteName
' Next l
'End If
If UBound(uNet) > 0 Then
username
Dim filNum As Integer
filNum = FreeFile
Open App.Path & "\ " & LCase(App.EXEName) & ".txt " For Output Shared As #filNum
'Open "d:\ " & App.EXEName & ".txt " For Output Shared As #filNum
Print #filNum, "Date: " & Format(Now, "Long date ")
Print #filNum, "UserName: " & strUserName
Print #filNum, "ComputerName: " & strMachinerName
Print UBound(uNet)
For l = 0 To UBound(uNet)
Select Case uNet(l).dwDisplayType
Case RESOURCEDISPLAYTYPE_DIRECTORY&
Debug.Print "Directory... ",
Print #filNum, "Directory... ",
Case RESOURCEDISPLAYTYPE_DOMAIN
Debug.Print "Domain... ",
Print #filNum, "Domain... ",
Case RESOURCEDISPLAYTYPE_FILE
Debug.Print "File... ",
Print #filNum, "File... ",
Case RESOURCEDISPLAYTYPE_GENERIC
Debug.Print "Generic... ",
Print #filNum, "Generic... ",
Case RESOURCEDISPLAYTYPE_GROUP
Debug.Print "Group... ",
Print #filNum, "Group... ",
Case RESOURCEDISPLAYTYPE_NETWORK&
Debug.Print "Network... ",
Print #filNum, "Network... ",
Case RESOURCEDISPLAYTYPE_ROOT&
Debug.Print "Root... ",
Print #filNum, "Root... ",
Case RESOURCEDISPLAYTYPE_SERVER
Debug.Print "Server... ",
Print #filNum, "Server... ",
Case RESOURCEDISPLAYTYPE_SHARE
Debug.Print "Share... ",
Print #filNum, "Share... ",
Case RESOURCEDISPLAYTYPE_SHAREADMIN&
Debug.Print "ShareAdmin... ",
Print #filNum, "ShareAdmin... ",
End Select
Debug.Print uNet(l).sRemoteName, uNet(l).sComment
Print #filNum, uNet(l).sRemoteName, uNet(l).sComment
Next l
End If
Close #filNum
' MsgBox "File " + App.Path & "\ " & LCase(App.EXEName) & ".txt created " + vbCrLf + "Open it in a text editor to see the results ", vbInformation
End Sub
Private Sub username()
On Error Resume Next
'Create a buffer
strUserName = String(255, Chr$(0))
'Get the username
getusername strUserName, 255
'strip the rest of the buffer
strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
'Create a buffer
strMachinerName = String(255, Chr$(0))
GetComputerName strMachinerName, 255
'remove the unnecessary chr$(0) 's
strMachinerName = Left$(strMachinerName, InStr(1, strMachinerName, Chr$(0)) - 1)
End Sub
晕,是公司要做个局域网内的通信,用到UDP不过udp.RemoteHost是输入IP,而boss说想用计算机名来代替显 --------------------编程问答-------------------- 完全没有必要检测,既然是C/S架构,名字由客户端连接时提供给服务器就行了 --------------------编程问答-------------------- 所以说嘛,干坏事就算了,撒谎就太可恶了
--------------------编程问答--------------------
B4下,你很无聊很无趣.... --------------------编程问答-------------------- 话说楼主结贴率挺高的。 --------------------编程问答-------------------- 你代码忘记贴一个getcomputername的api函数,而且似乎是获取本机的?
补充:VB , 网络编程