于振海网——于振海的个人博客搜索

vb获取mac地址模块

发布时间:2011年11月20日  更新时间:2024年6月9日
作者:未知  文章ID:506  浏览:

Public CheckCode As Long

Private Const NCBASTAT                       As Long = &H33
Private Const NCBNAMSZ                       As Integer = 16
Private Const HEAP_ZERO_MEMORY               As Long = &H8
Private Const HEAP_GENERATE_EXCEPTIONS       As Long = &H4
Private Const NCBRESET                       As Long = &H32
Private 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 Long
End Type
Private 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 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
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

Public Function GetMAC() As Integer

 
  Dim bRet    As Byte
  Dim myNcb   As NCB
  Dim myASTAT As ASTAT
  Dim pASTAT  As Long
  Dim intMAC As Integer
 
    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)
    intMAC = myASTAT.adapt.adapter_address(0)
    intMAC = intMAC + myASTAT.adapt.adapter_address(1)
    intMAC = intMAC + myASTAT.adapt.adapter_address(2)
    intMAC = intMAC + myASTAT.adapt.adapter_address(3)
    intMAC = intMAC + myASTAT.adapt.adapter_address(4)
    intMAC = intMAC + myASTAT.adapt.adapter_address(5)
    GetMAC = intMAC
    Call HeapFree(GetProcessHeap(), 0, pASTAT)

End Function

Public 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 Function

Private Function HexEx(ByVal B As Long) As String
 
  Dim aa As String

    aa = Hex$(B)
    If Len(aa) < 2 Then
        aa = "0" & aa
    End If
    HexEx = aa

End Function

Private Sub Command1_Click()
MsgBox GetMACAddress
End Sub

发表评论  挑错  文章投稿  联系我
  • 上一篇:通过CuteFTP查看远程ftp服务器的隐藏文件(如.htaccess)
  • 下一篇:DedeCms附件目录统一修改为年月方法
  • 【推荐文章】

  • 辛弃疾《清平乐·题上卢桥》创作背景、赏析

    【原文】 清平乐① 题上卢桥② 辛弃疾 清泉犇快,不管青山碍③。千里盘盘平世界,更...

  • 苏轼《澄迈驿通潮阁二首》赏析

    【原文】 澄迈驿通潮阁二首① 苏轼 (一) 倦客愁闻归路遥, 眼明飞阁俯长桥。 贪看...

  • 如何写好议论文——论题:奋斗

    【论题阐述】 奋斗 一词的本义就是指为了目标去努力行动。在现代社会中,面临着很大...

  • 如何写好日记之每日生活新鲜事

    【原文】 如何写好日记之每日生活新鲜事 每一天,我们身边都会发生大大小小的事,它...

  • 海王星上为什么风暴不断

    在我们的心目中,风暴多起源于太阳的热力:阳光使大气和海水受热,造成空气对流而刮...

  • 站成一棵树

    父亲是在李阳出事的第二天赶回村庄的。 事情也不算大,李阳打了同学。李阳以前也打同...

  • 【最新文章】

  • 白居易《江楼夕望招客》赏析
  • 姜夔《点绛唇·丁未冬过吴松作》赏析
  • 辛弃疾《清平乐·题上卢桥》创作背景、赏析
  • 陶渊明《答庞参军》赏析
  • 苏轼《澄迈驿通潮阁二首》赏析
  • 垃圾分类的作文素材
  • 如何写作文——一次奇特的比赛(想象作文)
  • 如何培养孩子独自人格,让他学会承担自己的人
  • 如何写好议论文——论题:奋斗
  • 如何写好作文之写人篇
  • 如何写好作文之叙事篇
  • 如何写好作文之写景篇
  • 如何写好日记之今天我来画美景
  • 如何写好日记之每日生活新鲜事
  • 如何写好日记之斑斓校园每一天