现在csdn上找到的几段读网卡号的vb程序在我的ibm笔记本上都读不出网卡号,
在台式机上好像可以,我看csdn上也有人说是有的机器上读不出,
请问哪位有改善的方法?请指点
急等。。附原来的程序:
Option ExplicitPublic 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 = &H32Public 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
    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       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 TypePublic 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 TypePublic 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, ByVal dwFlags As Long, lpMem As Any) As LongPublic 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 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") & " " & _
            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 = tmpEnd Function

解决方案 »

  1.   

    IP Wizard是一个在Windows2000下运行的程序,可以获得当前系统中所有的TCP/IP网络设定的信息。包括IP地址、网络掩码、网卡MAC址(如果有的话)。该程序使用了Windows Management Instrumentation (WMI)。http://www.applevb.com/sourcecode/ipwizard.zip
      

  2.   

    ip wizard中列出了一堆网卡,我怎么来确定本地连接使用的是哪块网卡?
    能不能给个比较简单的代码例子?直接读取用于本地连接的网卡?
      

  3.   

    找到了相关的代码,谢谢冰儿马甲。。
    http://www.applevb.com/art/ar_wmi.htm