应该有API函数可读,找找看~~

解决方案 »

  1.   

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}  1、在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass
    {4D36E972-E325-11CE-BFC1-08002BE10318}000、0001、0002等主键下,查
    找DriverDesc内容为你要修改的网卡的描述的,如0000。下面的方法和rifter
    《修改MAC地址的范例》中提到的一样,我就照搬了(注解的地方以“^^”标
    明)。“---->
      2、在其下,添一个字符串,名字为NetworkAddress,值设为你要的MAC地
        ^^^^^【指在0000主键下】
    址,要连续写。如004040404040。  3、然后到其下NDIparams中加一项NetworkAddress的主键,在该主键下
          ^^^^^【也是指在0000主键下】
    添加名为default的字符串,值写要设的MAC地址,要连续写,如004040404040。
    ^^^^^^^^^^^^^^^^^^^^^^^
    【实际上这只是设置在后面提到的高级属性中的**初始值**,实际使用的MAC
    地址还是取决于在第2点中提到的NetworkAddress参数,而且一旦设置后,以
    后高级属性中值就是NetworkAddress给出的值而非default给出的了。】  4、在NetworkAddress的主键下继续添加名为ParamDesc的字符串,其作用
    为指定NetworkAddress主键的描述,其值可为“MAC Address”,这样以后打
    开网络邻居的属性,双击相应网卡项会发现有一个高级设置,其下存在
    MAC Address 的选项,就是你在注册表中加的新项NetworkAddress,以后只要
    在此修改MAC地址就可以了。
      5、关闭注册表,重新启动,你的网卡地址已改。打开网络邻居的属性,
    双击相应网卡项会发现有一个MAC Address的高级设置项。用于直接修改MAC地
    址。
      

  2.   

    Private Const NCBASTAT = &H33
    Private Const NCBNAMSZ = 16
    Private Const HEAP_ZERO_MEMORY = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS = &H4
    Private Const NCBRESET = &H32Private 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 ' Reserved, must be 0
      ncb_event As Long
    End TypePrivate 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 TypePrivate Type NAME_BUFFER
      name As String * NCBNAMSZ
      name_num As Integer
      name_flags As Integer
    End TypePrivate Type ASTAT
      adapt As ADAPTER_STATUS
      NameBuff(30) As NAME_BUFFER
    End TypePrivate 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 LongPrivate Function EthernetAddress(LanaNumber As Long) As String
      Dim udtNCB       As NCB
      Dim bytResponse  As Byte
      Dim udtASTAT     As ASTAT
      Dim udtTempASTAT As ASTAT
      Dim lngASTAT     As Long
      Dim strOut       As String
      Dim x            As Integer  udtNCB.ncb_command = NCBRESET
      bytResponse = Netbios(udtNCB)
      udtNCB.ncb_command = NCBASTAT
      udtNCB.ncb_lana_num = LanaNumber
      udtNCB.ncb_callname = "* "
      udtNCB.ncb_length = Len(udtASTAT)
      lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
      strOut = ""
      If lngASTAT Then
        udtNCB.ncb_buffer = lngASTAT
        bytResponse = Netbios(udtNCB)
        CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
         With udtASTAT.adapt
          For x = 0 To 5
            strOut = strOut & "-" & Right$("00" & Hex$(.adapter_address(x)), 2)
          Next x
        End With
        HeapFree GetProcessHeap(), 0, lngASTAT
      End If
      EthernetAddress = strOut
    End FunctionPrivate Sub Command1_Click()
      Text1.Text = Right$(EthernetAddress(0), 17)
      Text2.Text = Winsock1.LocalIP
      Text3.Text = Winsock1.LocalHostName
    End Sub