| 
   很多软件以取得网卡地址作为License验证,这不失为一个验证合法用户的好办法,不过要付出回复用户电话、传真的代价哦 ^_^    将下面这段代码拷贝到程序中,然后在你的程序需要的时候调用EthernetAddress(0),该函数返回的字符串就是您机器上网卡的以太序列号。 
  Private Const NCBASTAT = &H33  Private Const NCBNAMSZ = 16  Private Const HEAP_ZERO_MEMORY = &H8  Private Const HEAP_GENERATE_EXCEPTIONS = &H4  Private Const NCBRESET = &H32 
  Private 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 Type 
  Private 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 Type 
  Private Type NAME_BUFFER   name As String * NCBNAMSZ   name_num As Integer   name_flags As Integer  End Type 
  Private Type ASTAT   adapt As ADAPTER_STATUS   NameBuff(30) As NAME_BUFFER  End Type 
  Private 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 Long 
  Private 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 Function  |