网页功能: 加入收藏 设为首页 网站搜索  
用VB动态获取所有网络邻居的名称及其IP地址
发表日期:2003-12-09作者:[] 出处:  

这有一个取IP的function:

Public Const MIN_SOCKETS_REQD As Long = 1

Public Const WS_VERSION_REQD As Long = &H101

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 Const SOCKET_ERROR As Long = -1

Public Const WSADESCRIPTION_LEN = 257

Public Const WSASYS_STATUS_LEN = 129

Public Const MAX_WSADescription = 256

Public Const MAX_WSASYSStatus = 128

Public Type WSAData

  wVersion As Integer

  wHighVersion As Integer

  szDescription(0 To MAX_WSADescription) As Byte

  szSystemStatus(0 To MAX_WSASYSStatus) As Byte

  wMaxSockets As Integer

  wMaxUDPDG As Integer

  dwVendorInfo As Long

End Type

Type WSADataInfo

  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 String

End Type

Public Type HOSTENT

  hName As Long

  hAliases As Long

  hAddrType As Integer

  hLen As Integer

  hAddrList As Long

End Type

Declare Function WSAStartupInfo Lib "WSOCK32" Alias "WSAStartup" (ByVal wVersionRequested As Integer, lpWSADATA As WSADataInfo) As Long

Declare Function WSACleanup Lib "WSOCK32" () As Long

Declare Function WSAGetLastError Lib "WSOCK32" () As Long

Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA As WSAData) As Long

Declare Function gethostname Lib "WSOCK32" (ByVal szHost As String, ByVal dwHostLen As Long) As Long

Declare Function gethostbyname Lib "WSOCK32" (ByVal szHost As String) As Long

Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Public Function GetIPAddress() As String

  Dim sHostName As String * 256

  Dim lpHost As Long

  Dim HOST As HOSTENT

  Dim dwIPAddr As Long

  Dim tmpIPAddr() As Byte

  Dim I As Integer

  Dim sIPAddr As String

  If Not SocketsInitialize() Then

    GetIPAddress = ""

    Exit Function

  End If

  If gethostname(sHostName, 256) = SOCKET_ERROR Then

    GetIPAddress = ""

    MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."

    SocketsCleanup

    Exit Function

  End If

  sHostName = Trim$(sHostName)

  lpHost = gethostbyname(sHostName)

  If lpHost = 0 Then

    GetIPAddress = ""

    MsgBox "Windows Sockets are not responding. " & "Unable to successfully get Host Name."

    SocketsCleanup

    Exit Function

  End If

  CopyMemoryIP HOST, lpHost, Len(HOST)

  CopyMemoryIP dwIPAddr, HOST.hAddrList, 4

  ReDim tmpIPAddr(1 To HOST.hLen)

  CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.hLen

  For I = 1 To HOST.hLen

    sIPAddr = sIPAddr & tmpIPAddr(I) & "."

  Next

  GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)

  SocketsCleanup

End Function

Public Function GetIPHostName() As String

  Dim sHostName As String * 256

  If Not SocketsInitialize() Then

    GetIPHostName = ""

    Exit Function

  End If

  If gethostname(sHostName, 256) = SOCKET_ERROR Then

    GetIPHostName = ""

    MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."

    SocketsCleanup

    Exit Function

  End If

  GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)

  SocketsCleanup

End Function

Public Function HiByte(ByVal wParam As Integer)

  HiByte = wParam \ &H100 And &HFF&

End Function

Public Function LoByte(ByVal wParam As Integer)

  LoByte = wParam And &HFF&

End Function

Public Sub SocketsCleanup()

  If WSACleanup() <> ERROR_SUCCESS Then

    MsgBox "Socket error occurred in Cleanup."

  End If

End Sub

Public 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.wMaxSockets < 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

  'must be OK, so lets do it

  SocketsInitialize = True

End Function

取所有的计算机,这里也有一个例子

Private Const RESOURCE_CONNECTED As Long = &H1&

Private Const RESOURCE_GLOBALNET As Long = &H2&

Private Const RESOURCE_REMEMBERED As Long = &H3&

Private Const RESOURCEDISPLAYTYPE_DIRECTORY& = &H9

Private Const RESOURCEDISPLAYTYPE_DOMAIN& = &H1

Private Const RESOURCEDISPLAYTYPE_FILE& = &H4

Private Const RESOURCEDISPLAYTYPE_GENERIC& = &H0

Private Const RESOURCEDISPLAYTYPE_GROUP& = &H5

Private Const RESOURCEDISPLAYTYPE_NETWORK& = &H6

Private Const RESOURCEDISPLAYTYPE_ROOT& = &H7

Private Const RESOURCEDISPLAYTYPE_SERVER& = &H2

Private Const RESOURCEDISPLAYTYPE_SHARE& = &H3

Private Const RESOURCEDISPLAYTYPE_SHAREADMIN& = &H8

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_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 Type

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

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

Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long

Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long

Private Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) 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 Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public strUserName As String

Public strMachinerName As String

Sub main()

  'KPD-Team 2000

  'URL: http://www.allapi.net/

  'E-Mail: KPDTeam@Allapi.net

  '-> This sample was created by Donald Grover

  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

  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

    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, ""

    Print #filNum, "UserName:   " & strUserName

    Print #filNum, "Computer Name: " & strMachinerName

    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

如果dwDisplayType为 RESOURCEDISPLAYTYPE_SERVER一般就是计算机。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 用VB动态获取所有网络邻居的名称及其IP地址
本类热点文章
  用MSComm控件实现来电显示
  WOL(Wake on Lan)程序的源代码
  用VB调试串口通讯
  用PocketPCPhone替代AT指令的手机SMS服务
  保存页面为MHT的代码
  用VB动态获取所有网络邻居的名称及其IP..
  于Winsock控件制作的一个“服务器,N客..
  VB实现远程共享显示及声音
  Windows下访问共享的解决方案
  VB实现的MSN信息群发软件
  如何检测是否已连接到Internet?
  VB学习:MX记录获取组件
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2019 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00441