http://ygyuan.3322.net/有 VB 源代码!

解决方案 »

  1.   

    可以去这里看一看,有完整的演示代码,绝对实用:
    http://www.aslike.net
      

  2.   

    Option Explicit
    '**************为取网卡地址的API声明**************Private Const NCBASTAT = &H33
    Private Const NCBNAMSZ = 16
    Private Const HEAP_ZERO_MEMORY = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS = &H4
    Private Const NCBRESET = &H32Private Type NCB
      ncb_command As Byte
      ncb_retcode As Byte
      ncb_lsn As Byte
      ncb_num As Byte
      ncb_buffer As Long
      ncb_length As Integer
      ncb_callname As String * NCBNAMSZ
      ncb_name As String * NCBNAMSZ
      ncb_rto As Byte
      ncb_sto As Byte
      ncb_post As Long
      ncb_lana_num As Byte
      ncb_cmd_cplt As Byte
      ncb_reserve(9) As Byte ' Reserved, must be 0
      ncb_event As Long
    End TypePrivate Type ADAPTER_STATUS
      adapter_address(5) As Byte
      rev_major As Byte
      reserved0 As Byte
      adapter_type As Byte
      rev_minor As Byte
      duration As Integer
      frmr_recv As Integer
      frmr_xmit As Integer
      iframe_recv_err As Integer
      xmit_aborts As Integer
      xmit_success As Long
      recv_success As Long
      iframe_xmit_err As Integer
      recv_buff_unavail As Integer
      t1_timeouts As Integer
      ti_timeouts As Integer
      Reserved1 As Long
      free_ncbs As Integer
      max_cfg_ncbs As Integer
      max_ncbs As Integer
      xmit_buf_unavail As Integer
      max_dgram_size As Integer
      pending_sess As Integer
      max_cfg_sess As Integer
      max_sess As Integer
      max_sess_pkt_size As Integer
      name_count As Integer
    End TypePrivate Type NAME_BUFFER
      name As String * NCBNAMSZ
      name_num As Integer
      name_flags As Integer
    End TypePrivate Type ASTAT
      adapt As ADAPTER_STATUS
      NameBuff(30) As NAME_BUFFER
    End TypePrivate Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    Private Declare Function GetProcessHeap Lib "kernel32" () As Long
    Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long'**********************************
    '* 得到网卡地址
    '* EthernetAddress(0)
    '* 返回值:字符串
    '**********************************
    Public Function EthernetAddress(LanaNumber As Long) As String
      Dim udtNCB       As NCB
      Dim bytResponse  As Byte
      Dim udtASTAT     As ASTAT
      Dim udtTempASTAT As ASTAT
      Dim lngASTAT     As Long
      Dim strOut       As String
      Dim x            As Integer
      udtNCB.ncb_command = NCBRESET
      bytResponse = Netbios(udtNCB)
      udtNCB.ncb_command = NCBASTAT
      udtNCB.ncb_lana_num = LanaNumber
      udtNCB.ncb_callname = "* "
      udtNCB.ncb_length = Len(udtASTAT)
      lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
      strOut = ""
      If lngASTAT Then
        udtNCB.ncb_buffer = lngASTAT
        bytResponse = Netbios(udtNCB)
        CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
         With udtASTAT.adapt
          For x = 0 To 5
            strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
          Next x
        End With
        HeapFree GetProcessHeap(), 0, lngASTAT
      End If
      EthernetAddress = strOut
    End FunctionPrivate Sub Form_Load()
        MsgBox EthernetAddress(0)
    End Sub