zoukankan      html  css  js  c++  java
  • VB6获取本机所有IP地址公用函数

    因为正好有用到,整了个公用函数,一次获取本机全部IP地址:

    Option Explicit
    
    Private Declare Function WSAstartup Lib "WSOCK32.DLL" Alias "WSAStartup" (ByVal wVersionRequired As Integer, ByRef lpWSAData As WSAdata) As Long
    Private Declare Function WsACleanup Lib "WSOCK32.DLL" Alias "WSACleanup" () As Long
    Private Declare Function WSAIoctl Lib "ws2_32.dll" (ByVal s As Long, ByVal dwIoControlCode As Long, lpvInBuffer As Any, ByVal cbInBuffer As Long, lpvOutBuffer As Any, ByVal cbOutBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As Long, lpCompletionRoutine As Long) As Long
    Private Declare Function socket Lib "WSOCK32.DLL" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
    Private Declare Function closesocket Lib "WSOCK32.DLL" (ByVal s As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    
    Private Type sockaddr
        sin_family As Integer
        sin_port As Integer
        sin_addr As Long
        sin_zero As String * 8
    End Type
    
    Private Type sockaddr_gen
        AddressIn As sockaddr
        filler(0 To 7) As Byte
    End Type
    
    Private Type INTERFACE_INFO
        iiFlags As Long
        iiAddress As sockaddr_gen
        iiBroadcastAddress As sockaddr_gen
        iiNetmask As sockaddr_gen
    End Type
    
    Private Type INTERFACEINFO
        iInfo(0 To 7) As INTERFACE_INFO
    End Type
    
    Private Type WSAdata
        wVersion As Integer
        wHighVersion As Integer
        szDescription As String * 255
        szSystemStatus As String * 128
        iMaxSockets As Integer
        iMaxUdpDg As Integer
        lpVendorInfo As Long
    End Type
    
    Private Const AF_INET = 2
    Private Const SOCK_STREAM = 1
    Private Const INVALID_SOCKET = -1
    Private Const SIO_GET_INTERFACE_LIST As Long = &H4004747F
    
    Private Function GetStrIPFromLong(nIP As Long) As String
        On Error Resume Next
        Dim btBuffer(3) As Byte
        Call CopyMemory(ByVal VarPtr(btBuffer(0)), ByVal VarPtr(nIP), 4)
        Let GetStrIPFromLong = btBuffer(0) & "." & btBuffer(1) & "." & btBuffer(2) & "." & btBuffer(3)
    End Function
    
    Public Function EnumLocalIpAddress() As String()
        On Error GoTo Z
        Dim lngSocketHandle       As Long
        Dim lngBytesReturned      As Long
        Dim tpBuffer              As INTERFACEINFO
        Dim nNumInterfaces        As Integer
        Dim i                     As Integer
        Dim StartupInfo           As WSAdata
        Dim strIPBuffer()         As String
    
        If WSAstartup(&H202, StartupInfo) <> 0 Then
           Exit Function
        End If
        
        lngSocketHandle = socket(AF_INET, SOCK_STREAM, 0)
        If lngSocketHandle = INVALID_SOCKET Then
           Exit Function
        End If
        
        If WSAIoctl(lngSocketHandle, SIO_GET_INTERFACE_LIST, ByVal 0, ByVal 0, tpBuffer, 1024, lngBytesReturned, ByVal 0, ByVal 0) Then
           closesocket lngSocketHandle
           Exit Function
        End If
    
        nNumInterfaces = CInt(lngBytesReturned / 76)
        
        ReDim strIPBuffer(nNumInterfaces - 1)
        
        For i = 0 To nNumInterfaces - 1
            strIPBuffer(i) = GetStrIPFromLong(tpBuffer.iInfo(i).iiAddress.AddressIn.sin_addr)
        Next i
        
        EnumLocalIpAddress = strIPBuffer
        closesocket lngSocketHandle
        WsACleanup
        Exit Function
    Z:
    End Function
    
    


    使用很简单:

        Dim i As Long, strIPAdd() As String
        strIPAdd = EnumLocalIpAddress
        If SafeArrayGetDim(strIPAdd) > 0 Then
           For i = 0 To UBound(strIPAdd)
               Debug.Print strIPAdd(i)
           Next
        End If
    


     

  • 相关阅读:
    mysql的length与char_length的区别
    case when 多个条件 以及case when 权重排序
    ogitor下载地址
    简单单例模式
    求切线和次法线
    Alpha混合物体的深度排序
    C++对齐问题
    Computing Tangent Space Basis Vectors for an Arbitrary Mesh
    .NET三层架构简析
    DaGridView导出Excel
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2980722.html
Copyright © 2011-2022 走看看