发信人: _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()就? 梢粤耍⒁夥祷厥堇嘈?
 
 
  ---- 抵制日货,勿忘国耻! | 
 
 
 |