VB获取MAC地址

来源:互联网 发布:南风知我意txt微盘 编辑:程序博客网 时间:2024/04/30 22:14
 
  1. Private Const NCBASTAT As Long = 
  2. Private Const NCBNAMSZ As Long = 16
  3. Private Const HEAP_ZERO_MEMORY As Long = 
  4. Private Const HEAP_GENERATE_EXCEPTIONS As Long = 
  5. Private Const NCBRESET As Long = 
  6. Private Const NCBENUM As Long = 
  7. Private Const MAX_LANA As Long = 254
  8. Private Type LANA_ENUM
  9.     Length As Byte
  10.     Lana(MAX_LANA) As Byte
  11. End Type
  12. Private Type NET_CONTROL_BLOCK
  13. ncb_command As Byte
  14. ncb_retcode As Byte
  15. ncb_lsn As Byte
  16. ncb_num As Byte
  17. ncb_buffer As Long
  18. ncb_length As Integer
  19. ncb_callname As String * NCBNAMSZ
  20. ncb_name As String * NCBNAMSZ
  21. ncb_rto As Byte
  22. ncb_sto As Byte
  23. ncb_post As Long
  24. ncb_lana_num As Byte
  25. ncb_cmd_cplt As Byte
  26. ncb_reserve(9) As Byte
  27. ncb_event As Long
  28. End Type
  29. Private Type ADAPTER_STATUS
  30. adapter_address(5) As Byte
  31. rev_major As Byte
  32. reserved0 As Byte
  33. adapter_type As Byte
  34. rev_minor As Byte
  35. duration As Integer
  36. frmr_recv As Integer
  37. frmr_xmit As Integer
  38. iframe_recv_err As Integer
  39. xmit_aborts As Integer
  40. xmit_success As Long
  41. recv_success As Long
  42. iframe_xmit_err As Integer
  43. recv_buff_unavail As Integer
  44. t1_timeouts As Integer
  45. ti_timeouts As Integer
  46. Reserved1 As Long
  47. free_ncbs As Integer
  48. max_cfg_ncbs As Integer
  49. max_ncbs As Integer
  50. xmit_buf_unavail As Integer
  51. max_dgram_size As Integer
  52. pending_sess As Integer
  53. max_cfg_sess As Integer
  54. max_sess As Integer
  55. max_sess_pkt_size As Integer
  56. name_count As Integer
  57. End Type
  58.      
  59. Private Type NAME_BUFFER
  60. name As String * NCBNAMSZ
  61. name_num As Integer
  62. name_flags As Integer
  63. End Type
  64. Private Type ASTAT
  65. adapt As ADAPTER_STATUS
  66. NameBuff(30) As NAME_BUFFER
  67. End Type
  68. Private Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte
  69.        
  70. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As LongByVal cbCopy As Long)
  71.        
  72. Private Declare Function GetProcessHeap Lib "kernel32" () As Long
  73. Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As LongByVal dwFlags As LongByVal dwBytes As LongAs Long
  74.        
  75. Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As LongByVal dwFlags As Long, lpMem As Any) As Long
  76. Public Function GetMACAddress(ID As LongAs String
  77.    Dim Lana As LANA_ENUM
  78.    Dim NCB As NET_CONTROL_BLOCK
  79.    Dim i As Integer
  80.    Dim pASTAT As Long
  81.    
  82.    NCB.ncb_buffer = VarPtr(Lana)
  83.    NCB.ncb_length = Len(Lana)
  84.    NCB.ncb_command = NCBENUM
  85.    pASTAT = Netbios(NCB)
  86.    GetMACAddress = disp(Lana.Lana(ID))
  87. End Function
  88. Private Function disp(ByVal num As LongAs String
  89.    Dim tmp As String
  90.    Dim pASTAT As Long
  91.    Dim LngBuff As Long
  92.    Dim NCB As NET_CONTROL_BLOCK
  93.    Dim AST As ASTAT
  94.    
  95.    NCB.ncb_command = NCBRESET
  96.    NCB.ncb_lana_num = num
  97.    Call Netbios(NCB)
  98.    NCB.ncb_callname = "*"
  99.    NCB.ncb_command = NCBASTAT
  100.    NCB.ncb_lana_num = num
  101.    NCB.ncb_length = Len(AST)
  102.      
  103.    pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, NCB.ncb_length)
  104.               
  105.    If pASTAT = 0 Then
  106.       Exit Function
  107.    End If
  108.      
  109.    NCB.ncb_buffer = pASTAT
  110.    Call Netbios(NCB)
  111.      
  112.    CopyMemory AST, NCB.ncb_buffer, Len(AST)
  113.      
  114. tmp = Hex(AST.adapt.adapter_address(0)) & Hex(AST.adapt.adapter_address(1)) & Hex(AST.adapt.adapter_address(2)) & _
  115.    Hex(AST.adapt.adapter_address(3)) & Hex(AST.adapt.adapter_address(4)) & Hex(AST.adapt.adapter_address(5))
  116.    
  117.                
  118.    HeapFree GetProcessHeap(), 0, pASTAT
  119.    disp = tmp
  120. End Function
原创粉丝点击