⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modlocalinf.bas

📁 企业ERP系统 采用VB+SQL2000实现。 有客户合约
💻 BAS
字号:
Attribute VB_Name = "modLocalInf"
Option Explicit

Private Const WS_VERSION_REQD = &H101
   Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
   Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
   Private Const MIN_SOCKETS_REQD = 1
   Private Const SOCKET_ERROR = -1
   Private Const WSADescription_Len = 256
   Private Const WSASYS_Status_Len = 128

   Private Type HOSTENT
       hName As Long
       hAliases As Long
       hAddrType As Integer
       hLength As Integer
       hAddrList As Long
   End Type

   Private Type WSADATA
       wversion As Integer
       wHighVersion As Integer
       szDescription(0 To WSADescription_Len) As Byte
       szSystemStatus(0 To WSASYS_Status_Len) As Byte
       iMaxSockets As Integer
       iMaxUdpDg As Integer
       lpszVendorInfo As Long
   End Type

   Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Long
   Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal _
   wVersionRequired As Integer, lpWSAData As WSADATA) As Long
   Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
   
   Private Declare Function gethostname Lib "wsock32.dll" (ByVal hostname$, _
   ByVal HostLen As Long) As Long
   Private Declare Function gethostbyname Lib "wsock32.dll" (ByVal _
   hostname$) As Long
   Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)
   Private Const NO_ERROR = 0
   
  Private Declare Function inet_addr Lib "wsock32.dll" (ByVal s As String) As Long
  Private Declare Function SendARP Lib "iphlpapi.dll" (ByVal DestIP As Long, ByVal SrcIP As Long, pMacAddr As Long, PhyAddrLen As Long) As Long
  'Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dst As Any, src As Any, ByVal bcount As Long)

   Function hibyte(ByVal wParam As Integer)

       hibyte = wParam \ &H100 And &HFF&

   End Function

   Function lobyte(ByVal wParam As Integer)

       lobyte = wParam And &HFF&

   End Function

   Sub SocketsInitialize()
   Dim WSAD As WSADATA
   Dim iReturn As Integer
   Dim sLowByte As String, sHighByte As String, sMsg As String

       iReturn = WSAStartup(WS_VERSION_REQD, WSAD)

       If iReturn <> 0 Then
           MsgBox "Winsock.dll is not responding."
           End
       End If

       If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _
           WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then

           sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
           sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
           sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
           sMsg = sMsg & " is not supported by winsock.dll "
           MsgBox sMsg
           End
       End If

       'iMaxSockets is not used in winsock 2. So the following check is only
       'necessary for winsock 1. If winsock 2 is requested,
       'the following check can be skipped.

       If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
           sMsg = "This application requires a minimum of "
           sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."
           MsgBox sMsg
           End
       End If

   End Sub

   Sub SocketsCleanup()
   Dim lReturn As Long

       lReturn = WSACleanup()

       If lReturn <> 0 Then
           MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup "
           End
       End If

   End Sub

   Public Sub Localinf()
   SocketsInitialize
   
   Dim hostname As String * 256
   Dim hostent_addr As Long
   Dim host As HOSTENT
   Dim hostip_addr As Long
   Dim temp_ip_address() As Byte
   Dim i As Integer
   Dim ip_address As String

       If gethostname(hostname, 256) = SOCKET_ERROR Then
           MsgBox "Windows Sockets error " & Str(WSAGetLastError())
           Exit Sub
       Else
           hostname = Trim$(hostname)
       End If

       hostent_addr = gethostbyname(hostname)

       If hostent_addr = 0 Then
           'MsgBox "Winsock.dll is not responding."
           Exit Sub
       End If

       RtlMoveMemory host, hostent_addr, LenB(host)
       RtlMoveMemory hostip_addr, host.hAddrList, 4

       'MsgBox hostname
       userInf.localName = StripTerminator(hostname)

       'get all of the IP address if machine is  multi-homed

       Do
           ReDim temp_ip_address(1 To host.hLength)
           RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength

           For i = 1 To host.hLength
               ip_address = ip_address & temp_ip_address(i) & "."
           Next
           ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)

           'MsgBox ip_address
           userInf.localIP = ip_address

           ip_address = ""
           host.hAddrList = host.hAddrList + LenB(host.hAddrList)
           RtlMoveMemory hostip_addr, host.hAddrList, 4
        Loop While (hostip_addr <> 0)
        
     'MAC
     On Error GoTo errLabel
    Dim oAdapters As Object, oAdapter As Object
    
    Set oAdapters = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True")
    For Each oAdapter In oAdapters
       ' MsgBox oAdapter.macaddress
        userInf.MAC = oAdapter.macaddress
    Exit For
    Next
errClear:
    If Trim$(userInf.MAC) = "" Then userInf.MAC = "00:00:00:00:00:00"
    SocketsCleanup
    Exit Sub
errLabel:
    GoTo errClear
   End Sub
 

Private Function StripTerminator(ByVal sInput As String) As String
          Dim ZeroPos     As Integer
          ZeroPos = InStr(1, sInput, vbNullChar)
          If ZeroPos > 0 Then
                  StripTerminator = Left$(sInput, ZeroPos - 1)
          Else
                  StripTerminator = sInput
          End If
  End Function



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -