对于一机多卡和在win98下无WMI服务,取网卡号需两种方法同时用:

If sSystemVer = "WINDOWS98" Then
        Text1 = EthernetAddressA  '取网卡号
    Else
        Text1 = EthernetAddress  '取网卡号使用WMI
    End If
    If sSystemVer = "WINDOWSNT" And (Len(Text1) = 0 Or Text1 = "000000000000") Then
        Text1 = EthernetAddressA  '取网卡号
    End If
    If Len(Text1) <> 12 Or Text1 = "000000000000" Then
        MsgBox "取网卡序列号错误,请联络系统管理员!", vbCritical, "帮助信息"
        Label2(1).Visible = True
    End If

以下为module1内容:
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public sSystemVer As String    '运行本程序系统版本

'* 取网卡地址--//.........

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, 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_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
  
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, ByVal dwFlags As Long, lpMem As Any) As Long
'* 以上为取网卡地址定义--//.......................

Public Function EthernetAddress() As String   '使用WMI取网卡号,win2000和XP下用
   On Error GoTo ErrorHandle
   Dim objs, obj
   Set objs = GetObject("winmgmts:").ExecQuery("SELECT MACAddress " & _
      "FROM Win32_NetworkAdapter WHERE " & _
      "((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))")
   For Each obj In objs   '有多个网卡,只取一个
      EthernetAddress = obj.MACAddress
      Exit For
   Next
   '取回来的格式为 00:00:00:00:00,去掉中间的:
   EthernetAddress = Replace(EthernetAddress, ":", "")
   Exit Function
ErrorHandle:
'    MsgBox "取网卡号错误,系统不能正常使用,请检查您的电脑硬件设备!" & Chr(13) & "请查看“服务”中WMI服务项是否有打开!", vbCritical, "帮助信息"
End Function

Public Function EthernetAddressA() As String  '在Win98下用
  ' 调用 EthernetAddress,该函数返回的字符串就是当前机器上网卡的以太序列号。
   Dim tmp As String
   Dim pASTAT As Long
   Dim NCB As NET_CONTROL_BLOCK
   Dim AST As ASTAT
On Error GoTo ErrorHandle
   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
   EthernetAddressA = tmp
   Exit Function
ErrorHandle:
    MsgBox "取网卡号错误,系统不能正常使用,请升级您的操作系统为Win2000或winXP!", vbCritical, "帮助信息"
End Function

Public Sub SystemVer()

Dim Maj As Integer
    Dim Min As Integer
    Dim Version As String
 
    WinVer Maj, Min, Version
   
    'Windows版本信息及系统目录"
   
    '操作系统名称=
        'MsgBox Version
    'Windows版本=
        'MsgBox CStr(Maj) + "." + CStr(Min)
       
    sSystemVer = Version
   
End Sub
 
Public Sub WinVer(ByRef intMajor As Integer, ByRef intMinor As Integer, ByRef strPlatform As String)

Dim OSystem As OSVERSIONINFO
OSystem.dwOSVersionInfoSize = 148

If apiGetVersion(OSystem) Then
    intMajor = OSystem.dwMajorVersion   ' Store the Major version in intMajor
    intMinor = OSystem.dwMinorVersion   ' Store the Minor version in intMinor
   
    Select Case OSystem.dwPlatformId    ' Set strPlatform
    Case 0
        strPlatform = "Windows" + CStr(intMajor) + "." + CStr(intMinor)
    Case 1
        strPlatform = "WINDOWS98"
    Case 2
        strPlatform = "WINDOWSNT"
    End SelectElse
    intMajor = 0
    intMinor = 0
    strPlatform = ""
End If
End Sub

两种取网卡序列号方法相关推荐

  1. 一文带你了解两种Transformer文字识别方法

    摘要:受Transformer模型的启发,目前一些学者将该结构应用到文本行识别中,以替代RNN,取得了良好的效果,如在HGA-STR和 SRN. 当前的文本行识别器为拥有更强的序列语义能力,模型多采用 ...

  2. JDK四种常见线程池及使用场景、两种提交任务的方法

    转载:JDK 提供的线程池及使用场景 - 编程猎人 (programminghunter.com) 目录 四种常见线程池 1.newFixedThreadPool 2.newSingleThreadE ...

  3. golang java rpc_golang两种调用rpc的方法

    本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: package main import ( &quo ...

  4. 05.MyBtais两种取值符号以及输入参数和输出参数

    输入参数:parameterType 两种取值符号的异同 1.类型为简单类型(8个基本类型+string) 不同点: a.#{任意值},${value} 其中的标识符只能是value b. #{}自动 ...

  5. 英雄无敌6服务器在哪个文件夹,Win7系统无法运行英雄无敌6的两种原因和解决方法...

    英雄无敌6作为一款策略模拟类游戏,深受高端玩家的喜爱.但最近有Win7旗舰版系统用户在玩英雄无敌6时,却出现了无法运行的情况,重启好多次还是一样,不太清楚是哪里出问题,网上相关解决方案也比较少,针对此 ...

  6. 两种ps切图方法(图层/切片)

    两种Ps切图方法 一.      基础操作: a)    Ctrl++ 放大图片,ctrl - -缩小图片 b)    按住空格键space+,点击鼠标左键,拖动图片. c)    修改单位,点击编辑 ...

  7. 归一化mysql函数_数据归一化和两种常用的归一化方法

    数据归一化和两种常用的归一化方法 一.总结 一句话总结: min-max标准化:x* =(x-min)/(max-min):新数据加入,需重新计算max和min Z-score标准化:x* =(x-μ ...

  8. win7 计算机名称 ip6,Win7系统提示ipv6无网络访问权限的两种原因及解决方法

    Win7系统提示ipv6无网络访问权限,导致无法上网,这该如何解决呢?ipv6无网络访问权限的原因有很多种,针对此问题,下面脚本之家的教大家解决ipv6无网络访问权限的问题,大家一起来看看吧. 故障原 ...

  9. 利用网络信息减少因果推断中的confounding bias--结合两种思路的新方法

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 本期AI TIME PhD专场,我们有幸邀请到了来自亚利桑那州立大学的博士生郭若城,为我们带来他的精彩分享--利用网络信息减少因果推断中 ...

最新文章

  1. libmemcached 1.0.11 发布
  2. 和远程ip_漏洞Microsoft Windows TCP/IP 远程执行代码漏洞威胁通告
  3. dva 中的响应编程
  4. CCNP学习笔记15-RSTP
  5. 如何在OpenJDK中使用ECC
  6. Django的get和post请求处理
  7. css3中transition和display的坑
  8. oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...
  9. android 商米扫码sdk,商米收银机|外接扫码枪问题:以T2为例
  10. 解决笔记本没有COM端口导致无法用SecureCRT或者超级终端配置交换机
  11. Python--基础语法知识
  12. css hover变成手_html实现鼠标悬停变成手型实现方式
  13. 用meta name=renderer content=webkit|ie-comp|ie-stand来切换360双核安全浏览器的极速模式和兼容模式
  14. MQTT网关连接阿里云平台案例教程
  15. 实现GB28181平台级联到海康平台的级联
  16. 在win7系统中设置共享,但是必须要关闭防火墙
  17. 10000+门店的蜜雪冰城,帮你找回软件赚钱的初心
  18. java abcd_Java的一个小题目,字母abcd 对应1234类推,输入单词得到对应的数字和...
  19. c++ MFC模拟笔记本键盘测试
  20. video 标签属性

热门文章

  1. 从数据恢复角度分析腾讯云静默损坏
  2. 基于Nastran的能量有限元方法(EFEA)介绍
  3. 关于Dota的一些话
  4. 灰烬使者服务器可以建立新账号吗,魔兽世界怀旧服:灰烬使者服务器排队过万,玩家头铁,原因太真实...
  5. 麦克纳姆轮PID控制原理
  6. laravel中的集合collect
  7. golang后台管理系统GoFrame+Vue+ElementUI框架搭建教程
  8. 【JavaScript】js基础第02天笔记
  9. oAuth2.0商品发布API接口,店铺上传接口,店铺商品发布接口,超详细的介绍
  10. dnf剑魂buff等级上限_DNF玩家超时空遇神豪红眼,只穿防具秒BOSS,团长直呼:巨佬...