精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..网络程序开发..〓〓>>Re:在 VB 中如何取得网卡的mac地址?

主题:Re:在 VB 中如何取得网卡的mac地址?
发信人: _ade(我来也)
整理人: gzwsh(2001-10-26 22:56:56), 站内信件
【 在 penk 的大作中提到:】
:请教各位大虾,如何在 VB 中去读取本机上网卡的 mac 地址?
:......
 模块中的内容 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Public Const NCBASTAT As Long = &H33 
Public Const NCBNAMSZ As Long = 16 
Public Const HEAP_ZERO_MEMORY As Long = &H8 
Public Const HEAP_GENERATE_EXCEPTIONS As Long = &H4 
Public Const NCBRESET As Long = &H32 

Public Type NET_CONTROL_BLOCK  '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,&nb sp;must be 0 
   ncb_event      As Long 
End Type 

Public 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 
&nb! sp;  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_un! avail  As Integer 
   max_dgram_size& nbsp;   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 
    
Public Type NAME_BUFFER 
   name        As String * NCBNAMSZ 
   name_num    As Integer 
   name_flags  As Integer 
End Type 

Public Type ASTAT 
   adapt          As ADAPTER_STATUS 
   NameBuff(! 30)   As NAME_BUFFER 
End Type 

Public Declare Function Netbios Lib "netapi32.dll" (pncb As NET_CONTROL_BLOCK) As Byte 
      
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long) 
      
Public Declare Function GetProcessHeap Lib "kernel32" () As Long 

Public Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long 
      
Public Declare Function HeapFree Lib ! ;"kernel32" (ByVal hHeap As Long, B yVal dwFlags As Long, lpMem As Any) As Long 


Public Function GetMACAddress() As String 
    
   Dim tmp As String 
   Dim pASTAT As Long 
   Dim NCB As NET_CONTROL_BLOCK 
   Dim AST As ASTAT 
   NCB.ncb_command = NCBRESET 
   Call Netbios(NCB) 
   NCB.ncb_callname = "*               " 
   NCB.ncb_command = NCBASTAT 
   NCB.ncb_lana_num = 0 
   NCB.ncb_length = Len(AST) 
    
   pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _ 
  &! nbsp;         Or HEAP_ZERO_MEMORY, NCB.ncb_length) 
             
   If pASTAT = 0 Then 
      Debug.Print "memory allocation failed!" 
      Exit Function 
   End If 
    
   NCB.ncb_buffer = pASTAT 
   Call Netbios(NCB) 
    
   CopyMemory AST, NCB.ncb_buffer, Len(AST) 
    
   tmp = Format$(Hex(AST.adapt.adapter_address(0)), "00") & " " & _ 
         Format$(Hex(AST.adapt.adapter_address(1)), "00") & "! ; " & _ 
     &nbs p;   Format$(Hex(AST.adapt.adapter_address(2)), "00") & " " & _ 
         Format$(Hex(AST.adapt.adapter_address(3)), "00") & " " & _ 
         Format$(Hex(AST.adapt.adapter_address(4)), "00") & " " & _ 
         Format$(Hex(AST.adapt.adapter_address(5)), "00") 
            
    
   HeapFree GetProcessHeap(), 0, pASTAT 
    
   GetMACAddress = tmp 

End Function 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
你只要在程序中调用GetMACAddress()就? 梢粤耍⒁夥祷厥堇嘈?



----
抵制日货,勿忘国耻!

[关闭][返回]