两种取网卡序列号方法
来源:互联网 发布:163邮箱端口 编辑:程序博客网 时间:2024/04/30 03:22
对于一机多卡和在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
- 两种取网卡序列号方法
- 网卡序列号的三种获得方法
- 修改网卡的序列号
- 网卡的序列号
- 取得网卡序列号
- C#得到CPU的序列号、硬盘序列号、网卡序列号
- 获取HD CPU 网卡序列号
- C#获取硬盘序列号,CPU序列号,网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- 获取CPU序列号,硬盘序列号,网卡mac地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- C#获取CPU序列号/网卡MAC地址/硬盘序列号
- 获取CPU序列号、网卡MAC地址、硬盘序列号
- java获取CPUID、网卡MAC、硬盘序列号、主板序列号
- 根据网卡MAC地址生成序列号
- VC获取硬盘序列号 网卡 cpuid bios
- delphi获取cpu和网卡序列号
- 3D游戏引擎剖析
- 性能相关
- Beginning Ubuntu Linux From Novice To Professional一些翻译笔记
- Summer@2006[2]
- SIP RTP输送问题
- 两种取网卡序列号方法
- Apache安装后无法启动的问题
- 加密解密类
- 昨晚和今天遇到一个好蠢的问题
- 女人终归是女人,需要有人疼的
- Ajax
- 第一次的亲密接触
- Conclusion of this week(sep,11-sep,16)
- 关于C#数组初始化的效率测试