API/COM/系统相关
API获取网卡地址
2017-04-14 17:12:42

网卡地址Option ExplicitPrivate Const NCBASTAT                       As Long = &H33Private Const NCBNAMSZ                       As Integer = 16Private Const HEAP_ZERO_MEMORY               As Long = &H8Private Const HEAP_GENERATE_EXCEPTIONS       As Long = &H4Private Const NCBRESET                       As Long = &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    ncb_event                                  As LongEnd 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 IntegerEnd TypePrivate Type NAME_BUFFER    name                                       As String * NCBNAMSZ    name_num                                   As Integer    name_flags                                 As IntegerEnd TypePrivate Type ASTAT    adapt                                      As ADAPTER_STATUS    NameBuff(30)                               As NAME_BUFFEREnd TypePrivate Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As BytePrivate 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 LongPrivate Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As LongPrivate Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As LongPublic Function GetMACAddress() As String    Dim bRet    As Byte  Dim myNcb   As NCB  Dim myASTAT As ASTAT  Dim pASTAT  As Long    myNcb.ncb_command = NCBRESET    bRet = Netbios(myNcb)    With myNcb        .ncb_command = NCBASTAT        .ncb_lana_num = 0        .ncb_callname = "* "        .ncb_length = Len(myASTAT)        pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, .ncb_length)    End With    If pASTAT = 0 Then        Exit Function    End If    myNcb.ncb_buffer = pASTAT    bRet = Netbios(myNcb)    CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)    GetMACAddress = HexEx(myASTAT.adapt.adapter_address(0)) & "-" & HexEx(myASTAT.adapt.adapter_address(1)) & "-" & HexEx(myASTAT.adapt.adapter_address(2)) & "-" & HexEx(myASTAT.adapt.adapter_address(3)) & "-" & HexEx(myASTAT.adapt.adapter_address(4)) & "-" & HexEx(myASTAT.adapt.adapter_address(5))    Call HeapFree(GetProcessHeap(), 0, pASTAT)End FunctionPrivate Function HexEx(ByVal B As Long) As String  Dim strH As String    strH = Hex$(B)    If Len(strH) < 2 Then        strH = "0" & strH    End If    HexEx = strHEnd Function