两种取网卡序列号方法
对于一机多卡和在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
两种取网卡序列号方法相关推荐
- 一文带你了解两种Transformer文字识别方法
摘要:受Transformer模型的启发,目前一些学者将该结构应用到文本行识别中,以替代RNN,取得了良好的效果,如在HGA-STR和 SRN. 当前的文本行识别器为拥有更强的序列语义能力,模型多采用 ...
- JDK四种常见线程池及使用场景、两种提交任务的方法
转载:JDK 提供的线程池及使用场景 - 编程猎人 (programminghunter.com) 目录 四种常见线程池 1.newFixedThreadPool 2.newSingleThreadE ...
- golang java rpc_golang两种调用rpc的方法
本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: package main import ( &quo ...
- 05.MyBtais两种取值符号以及输入参数和输出参数
输入参数:parameterType 两种取值符号的异同 1.类型为简单类型(8个基本类型+string) 不同点: a.#{任意值},${value} 其中的标识符只能是value b. #{}自动 ...
- 英雄无敌6服务器在哪个文件夹,Win7系统无法运行英雄无敌6的两种原因和解决方法...
英雄无敌6作为一款策略模拟类游戏,深受高端玩家的喜爱.但最近有Win7旗舰版系统用户在玩英雄无敌6时,却出现了无法运行的情况,重启好多次还是一样,不太清楚是哪里出问题,网上相关解决方案也比较少,针对此 ...
- 两种ps切图方法(图层/切片)
两种Ps切图方法 一. 基础操作: a) Ctrl++ 放大图片,ctrl - -缩小图片 b) 按住空格键space+,点击鼠标左键,拖动图片. c) 修改单位,点击编辑 ...
- 归一化mysql函数_数据归一化和两种常用的归一化方法
数据归一化和两种常用的归一化方法 一.总结 一句话总结: min-max标准化:x* =(x-min)/(max-min):新数据加入,需重新计算max和min Z-score标准化:x* =(x-μ ...
- win7 计算机名称 ip6,Win7系统提示ipv6无网络访问权限的两种原因及解决方法
Win7系统提示ipv6无网络访问权限,导致无法上网,这该如何解决呢?ipv6无网络访问权限的原因有很多种,针对此问题,下面脚本之家的教大家解决ipv6无网络访问权限的问题,大家一起来看看吧. 故障原 ...
- 利用网络信息减少因果推断中的confounding bias--结合两种思路的新方法
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 本期AI TIME PhD专场,我们有幸邀请到了来自亚利桑那州立大学的博士生郭若城,为我们带来他的精彩分享--利用网络信息减少因果推断中 ...
最新文章
- libmemcached 1.0.11 发布
- 和远程ip_漏洞Microsoft Windows TCP/IP 远程执行代码漏洞威胁通告
- dva 中的响应编程
- CCNP学习笔记15-RSTP
- 如何在OpenJDK中使用ECC
- Django的get和post请求处理
- css3中transition和display的坑
- oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...
- android 商米扫码sdk,商米收银机|外接扫码枪问题:以T2为例
- 解决笔记本没有COM端口导致无法用SecureCRT或者超级终端配置交换机
- Python--基础语法知识
- css hover变成手_html实现鼠标悬停变成手型实现方式
- 用meta name=renderer content=webkit|ie-comp|ie-stand来切换360双核安全浏览器的极速模式和兼容模式
- MQTT网关连接阿里云平台案例教程
- 实现GB28181平台级联到海康平台的级联
- 在win7系统中设置共享,但是必须要关闭防火墙
- 10000+门店的蜜雪冰城,帮你找回软件赚钱的初心
- java abcd_Java的一个小题目,字母abcd 对应1234类推,输入单词得到对应的数字和...
- c++ MFC模拟笔记本键盘测试
- video 标签属性
热门文章
- 从数据恢复角度分析腾讯云静默损坏
- 基于Nastran的能量有限元方法(EFEA)介绍
- 关于Dota的一些话
- 灰烬使者服务器可以建立新账号吗,魔兽世界怀旧服:灰烬使者服务器排队过万,玩家头铁,原因太真实...
- 麦克纳姆轮PID控制原理
- laravel中的集合collect
- golang后台管理系统GoFrame+Vue+ElementUI框架搭建教程
- 【JavaScript】js基础第02天笔记
- oAuth2.0商品发布API接口,店铺上传接口,店铺商品发布接口,超详细的介绍
- dnf剑魂buff等级上限_DNF玩家超时空遇神豪红眼,只穿防具秒BOSS,团长直呼:巨佬...