如何在VB中某个控件中,显示所有本局域网中的IP地址及计算机名呢,我想对他们控制,因为我这是教师机。谢谢各位!!

解决方案 »

  1.   

    http://community.csdn.net/Expert/TopicView.asp?id=5100329
    上面这个帖子中有我回复的一段ping一个IP的代码,这个局域网内机子的IP地址范围你应该是知道的,那就用一个循环去ping,ping通的就添加到list中或者listview控件中就行了。
      

  2.   

    VB枚举主机IP  在窗体上加入下列控件
    TextBox:Text1,ListBox:List1,CommandButton:Command1  在窗体上加入如下代码:  '--------------------------Form1---------------------------------
      Option Explicit  Private Function HiByte(ByVal wParam As Integer)
      HiByte = wParam \ &H100 And &HFF&
      End Function  Private Function LoByte(ByVal wParam As Integer)
      LoByte = wParam And &HFF&
      End Function  Private Sub SocketsCleanup()
      If WSACleanup() <> ERROR_SUCCESS Then
      MsgBox "Socket error occurred in Cleanup."
      End If
      End Sub
      Private Function SocketsInitialize() As Boolean
      Dim WSAD As WSAData
      Dim sLoByte As String
      Dim sHiByte As String
      If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
      MsgBox "The 32-bit Windows Socket is not responding."
      SocketsInitialize = False
      Exit Function
      End If
      If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
      MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) & " supported sockets."
      SocketsInitialize = False
      Exit Function
      End If
      If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
      sHiByte = CStr(HiByte(WSAD.wVersion))
      sLoByte = CStr(LoByte(WSAD.wVersion))
      MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by 32-bit Windows Sockets."
      SocketsInitialize = False
      Exit Function
      End If
      SocketsInitialize = True
      End Function  Private Function GetName() As String
      Dim sHostName As String * 256
      If Not SocketsInitialize() Then
      GetName = ""
      Exit Function
      End If
      If gethostname(sHostName, 256) = SOCKET_ERROR Then
      GetName = ""
      MsgBox "Windows Sockets error Unable to successfully get Host Name."
      SocketsCleanup
      Exit Function
      End If
      GetName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)
      SocketsCleanup
      End Function  Private Sub GetHostIP()
      Dim I As Integer
      If Not SocketsInitialize() Then
      MsgBox "Windows Sockets error"
      Exit Sub
      End If
      Dim lngPtrToHOSTENT As Long
      Dim udtHostent As HOSTENT
      Dim lngPtrToIP As Long
      Dim arrIpAddress() As Byte
      Dim strIpAddress As String
      List1.Clear
      lngPtrToHOSTENT = gethostbyname(Trim$(Text1.Text))
      If lngPtrToHOSTENT = 0 Then
      MsgBox "Windows Sockets error Unable to successfully get Host Ip."
      Else
      RtlMoveMemory udtHostent, lngPtrToHOSTENT, LenB(udtHostent)
      RtlMoveMemory lngPtrToIP, udtHostent.hAddrList, 4
      Do Until lngPtrToIP = 0
      ReDim arrIpAddress(1 To udtHostent.hLength)
      RtlMoveMemory arrIpAddress(1), lngPtrToIP, udtHostent.hLength
      For I = 1 To udtHostent.hLength
      strIpAddress = strIpAddress & arrIpAddress(I) & "."
      Next
      strIpAddress = Left$(strIpAddress, Len(strIpAddress) - 1)
      List1.AddItem strIpAddress
      strIpAddress = ""
      udtHostent.hAddrList = udtHostent.hAddrList + LenB(udtHostent.hAddrList)
      RtlMoveMemory lngPtrToIP, udtHostent.hAddrList, 4
      Loop
      End If
      SocketsCleanup  End Sub  Private Sub Command1_Click()
      GetHostIP
      End Sub  Private Sub Form_Load()
      Text1.Text = GetName
      End Sub
      '----------------------------end Form1----------------------------------
      在模块部分添加
      '----------------------------Module1------------------------------------
      Option Explicit  Public Const INADDR_NONE = &HFFFF
      Public Const SOCKET_ERROR = -1
      Public Const WSABASEERR = 10000
      Public Const WSAEFAULT = (WSABASEERR + 14)
      Public Const WSAEINVAL = (WSABASEERR + 22)
      Public Const WSAEINPROGRESS = (WSABASEERR + 50)
      Public Const WSAENETDOWN = (WSABASEERR + 50)
      Public Const WSASYSNOTREADY = (WSABASEERR + 91)
      Public Const WSAVERNOTSUPPORTED = (WSABASEERR + 92)
      Public Const WSANOTINITIALISED = (WSABASEERR + 93)
      Public Const WSAHOST_NOT_FOUND = 11001
      Public Const WSADESCRIPTION_LEN = 257
      Public Const WSASYS_STATUS_LEN = 129
      Public Const WSATRY_AGAIN = 11002
      Public Const WSANO_RECOVERY = 11003
      Public Const WSANO_DATA = 11004
      Public Const WS_VERSION_REQD As Long = &H101
      Public Const ERROR_SUCCESS = 0
      Public Const MIN_SOCKETS_REQD As Long = 1
      Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
      Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&  Public Type WSAData
      wVersion As Integer
      wHighVersion As Integer
      szDescription As String * WSADESCRIPTION_LEN
      szSystemStatus As String * WSASYS_STATUS_LEN
      iMaxSockets As Integer
      iMaxUdpDg As Integer
      lpVendorInfo As Long
      End Type  Public Type HOSTENT
      hName As Long
      hAliases As Long
      hAddrType As Integer
      hLength As Integer
      hAddrList As Long
      End Type  Public Type servent
      s_name As Long
      s_aliases As Long
      s_port As Integer
      s_proto As Long
      End Type  Public Type protoent
      p_name As String 'Official name of the protocol
      p_aliases As Long 'Null-terminated array of alternate names
      p_proto As Long 'Protocol number, in host byte order
      End Type  Public Declare Function WSAStartup _
      Lib "ws2_32.dll" (ByVal wVR As Long, lpWSAD As WSAData) As Long  Public Declare Function WSACleanup Lib "ws2_32.dll" () As Long  Public Declare Function gethostbyaddr _
      Lib "ws2_32.dll" (addr As Long, ByVal addr_len As Long, _
      ByVal addr_type As Long) As Long  Public Declare Function gethostbyname _
      Lib "ws2_32.dll" (ByVal host_name As String) As Long  Public Declare Function gethostname _
      Lib "ws2_32.dll" (ByVal host_name As String, _
      ByVal namelen As Long) As Long  Public Declare Function getservbyname _
      Lib "ws2_32.dll" (ByVal serv_name As String, _
      ByVal proto As String) As Long  Public Declare Function getprotobynumber _
      Lib "ws2_32.dll" (ByVal proto As Long) As Long  Public Declare Function getprotobyname _
      Lib "ws2_32.dll" (ByVal proto_name As String) As Long  Public Declare Function getservbyport _
      Lib "ws2_32.dll" (ByVal port As Integer, ByVal proto As Long) As Long  Public Declare Function inet_addr _
      Lib "ws2_32.dll" (ByVal cp As String) As Long  Public Declare Function inet_ntoa _
      Lib "ws2_32.dll" (ByVal inn As Long) As Long  Public Declare Function htons _
      Lib "ws2_32.dll" (ByVal hostshort As Integer) As Integer  Public Declare Function htonl _
      Lib "ws2_32.dll" (ByVal hostlong As Long) As Long  Public Declare Function ntohl _
      Lib "ws2_32.dll" (ByVal netlong As Long) As Long  Public Declare Function ntohs _
      Lib "ws2_32.dll" (ByVal netshort As Integer) As Integer  Public Declare Sub RtlMoveMemory _
      Lib "kernel32" (hpvDest As Any, _
      ByVal hpvSource As Long, _
      ByVal cbCopy As Long)  Public Declare Function lstrcpy _
      Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, _
      ByVal lpString2 As Long) As Long  Public Declare Function lstrlen _
      Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
      '----------------------------end Module1--------------------------------  好了,下面我们来测试一下:  先运行,然后点command1,怎么样?是不是把你本地的ip都加到了列表框了?  好,这次我们在文本框里输入:www.csdn.net,然后点command1  最后一次测试,我们输入:www.microsoft.com,然后点command1,天哪,他的服务器有那么多ip:(
      

  3.   

    http://topic.csdn.net/t/20011005/17/312625.html
      

  4.   

    大哥,如何能让所有本地局域网中的IP全部添加到list1控件中呢??