VB6 取得Mac Address方法

程式內容為網路轉載,純粹紀錄


Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &H32
Private Type NCB
    ncb_command As Byte 'Integer
    ncb_retcode As Byte 'Integer
    ncb_lsn As Byte 'Integer
    ncb_num As Byte ' Integer
    ncb_buffer As Long 'String
    ncb_length As Integer
    ncb_callname As String * NCBNAMSZ
    ncb_name As String * NCBNAMSZ
    ncb_rto As Byte 'Integer
    ncb_sto As Byte ' Integer
    ncb_post As Long
    ncb_lana_num As Byte 'Integer
    ncb_cmd_cplt As Byte 'Integer
    ncb_reserve(9) As Byte ' Reserved, must be 0
    ncb_event As Long
End Type

Private Type ADAPTER_STATUS
    adapter_address(5) As Byte 'As String * 6
    rev_major As Byte 'Integer
    reserved0 As Byte 'Integer
    adapter_type As Byte 'Integer
    rev_minor As Byte 'Integer
    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 Type

Private Type NAME_BUFFER
    name As String * NCBNAMSZ
    name_num As Integer
    name_flags As Integer
End Type
Private Type ASTAT
    adapt As ADAPTER_STATUS
    NameBuff(30) As NAME_BUFFER
End Type

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte

Public Function sGetMacAddress() As String
    If sMacAddress = "" Then
        Dim uRetCode As Integer
        Dim myNCB As NCB, cNCB As NCB
        Dim Adapter As ASTAT
        With myNCB
            .ncb_command = NCBRESET
            .ncb_lana_num = 0
        End With
        uRetCode = Netbios(myNCB)
        Debug.Print "The NCBRESET return code is:" & Hex(uRetCode)
        myNCB = cNCB
        With myNCB
            .ncb_command = NCBASTAT
            .ncb_lana_num = 0
            .ncb_callname = "*               "
            .ncb_buffer = VarPtr(Adapter) ' 使用 VB 未公開函數取得指標
            .ncb_length = Len(Adapter)
        End With
        uRetCode = Netbios(myNCB)
        Debug.Print "The NCBASTAT return code is:" & Hex(uRetCode)
        If uRetCode = 0 Then
            With Adapter
                sGetMacAddress = Hex(.adapt.adapter_address(0)) & _
                                 Hex(.adapt.adapter_address(1)) & _
                                 Hex(.adapt.adapter_address(2)) & _
                                 Hex(.adapt.adapter_address(3)) & _
                                 Hex(.adapt.adapter_address(4)) & _
                                 Hex(.adapt.adapter_address(5))
            End With
        End If
    End If
End Function