如何获得网卡的MAC编码(网络中的任意一台电脑) // 'frmMain Private Sub cmdGet_Click() txtNIC.Text = GetMACAddress txtMB.Text = MBSerialNumber End Sub 'basNIC Option ExplicitPublic 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 = &H32Public 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 TypePublic 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 TypePublic Type ASTAT adapt As ADAPTER_STATUS NameBuff(30) As NAME_BUFFER End TypePublic 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 LongPublic 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 Declare Function Netbios Lib "netapi32.dll" _ (pncb As NET_CONTROL_BLOCK) As Byte
'========================================================================================= ' 目 的: 取得本机网络卡号码。 '========================================================================================= Public Function GetMACAddress() As String
' retrieve the MAC Address for the network controller ' installed, returning a formatted string Dim AST As ASTAT Dim NCB As NET_CONTROL_BLOCK Dim pASTAT As Long Dim strTmp As String 'The IBM NetBIOS 3.0 specifications defines four basic 'NetBIOS environments under the NCBRESET command. Win32 'follows the OS/2 Dynamic Link Routine (DLR) environment. 'This means that the first NCB issued by an application 'must be a NCBRESET, with the exception of NCBENUM. 'The Windows NT implementation differs from the IBM 'NetBIOS 3.0 specifications in the NCB_CALLNAME field. NCB.ncb_command = NCBRESET Call Netbios(NCB)
'To get the Media Access Control (MAC) address for an 'ethernet adapter programmatically, use the Netbios() 'NCBASTAT command and provide a "*" as the name in the 'NCB.ncb_CallName field (in a 16-chr string). NCB.ncb_callname = "* " NCB.ncb_command = NCBASTAT
' For machines with multiple network adapters you need to ' enumerate the LANA numbers and perform the NCBASTAT ' command on each. Even when you have a single network ' adapter, it is a good idea to enumerate valid LANA numbers ' first and perform the NCBASTAT on one of the valid LANA ' numbers. It is considered bad programming to hardcode the ' LANA number to 0 (see the comments section below). 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
得到CPU序列号。********函数引用方法:AA = CPUInof_ME() (其中AA应为String类型)******** Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Const VER_PLATFORM_WIN32_NT = 2 Private Const VER_PLATFORM_WIN32_WINDOWS = 1 Private Const VER_PLATFORM_WIN32s = 0 Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 ' Maintenance string for PSS usage End TypePublic Function CPUInfo_ME() As String Dim len5 As Long, aa As Long Dim cmprName As String Dim osver As OSVERSIONINFO '取得Computer Name cmprName = String(255, 0) len5 = 256 aa = GetComputerName(cmprName, len5) cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1) computer = cmprName '取得CPU端口号 Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & computer & "\root\cimv2").ExecQuery("select * from Win32_Processor") For Each mycpu In CPUs CPUInfo_ME = mycpu.ProcessorId Next End Function
http://www.china-askpro.com/msg14/qa61.shtml
to haohaohappy(爱要冒险,工作要拼) Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\ " & computer & "\root\cimv2 ").ExecQuery("select * from Win32_Processor ") 中有"自动化错误"
如何获得网卡的MAC编码(网络中的任意一台电脑)
//
'frmMain
Private Sub cmdGet_Click()
txtNIC.Text = GetMACAddress
txtMB.Text = MBSerialNumber
End Sub
'basNIC
Option ExplicitPublic 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 = &H32Public 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 TypePublic 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 TypePublic Type ASTAT
adapt As ADAPTER_STATUS
NameBuff(30) As NAME_BUFFER
End TypePublic 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 LongPublic 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 Declare Function Netbios Lib "netapi32.dll" _
(pncb As NET_CONTROL_BLOCK) As Byte
'=========================================================================================
' 目 的: 取得本机网络卡号码。
'=========================================================================================
Public Function GetMACAddress() As String
' retrieve the MAC Address for the network controller
' installed, returning a formatted string
Dim AST As ASTAT
Dim NCB As NET_CONTROL_BLOCK
Dim pASTAT As Long
Dim strTmp As String 'The IBM NetBIOS 3.0 specifications defines four basic
'NetBIOS environments under the NCBRESET command. Win32
'follows the OS/2 Dynamic Link Routine (DLR) environment.
'This means that the first NCB issued by an application
'must be a NCBRESET, with the exception of NCBENUM.
'The Windows NT implementation differs from the IBM
'NetBIOS 3.0 specifications in the NCB_CALLNAME field.
NCB.ncb_command = NCBRESET
Call Netbios(NCB)
'To get the Media Access Control (MAC) address for an
'ethernet adapter programmatically, use the Netbios()
'NCBASTAT command and provide a "*" as the name in the
'NCB.ncb_CallName field (in a 16-chr string).
NCB.ncb_callname = "* "
NCB.ncb_command = NCBASTAT
' For machines with multiple network adapters you need to
' enumerate the LANA numbers and perform the NCBASTAT
' command on each. Even when you have a single network
' adapter, it is a good idea to enumerate valid LANA numbers
' first and perform the NCBASTAT on one of the valid LANA
' numbers. It is considered bad programming to hardcode the
' LANA number to 0 (see the comments section below).
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)
strTmp = 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
GetMACAddress = strTmpEnd Function'=========================================================================================
' 目 的: 取得主机板号码。
' 参考数据: WMI Object Browser。
'=========================================================================================
Public Function MBSerialNumber() As String
Dim obj As Object
Dim objs As Object
Dim strAnswer As String
Set objs = GetObject("WinMgmts:").InstancesOf("Win32_BaseBoard")
' 取出所有主机板的序号。
For Each obj In objs
strAnswer = strAnswer & obj.SerialNumber
If strAnswer < objs.Count Then
strAnswer = strAnswer & ","
End If
Next
MBSerialNumber = strAnswer
End Function
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32s = 0
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' Maintenance string for PSS usage
End TypePublic Function CPUInfo_ME() As String
Dim len5 As Long, aa As Long
Dim cmprName As String
Dim osver As OSVERSIONINFO
'取得Computer Name
cmprName = String(255, 0)
len5 = 256
aa = GetComputerName(cmprName, len5)
cmprName = Left(cmprName, InStr(1, cmprName, Chr(0)) - 1)
computer = cmprName '取得CPU端口号
Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & computer & "\root\cimv2").ExecQuery("select * from Win32_Processor")
For Each mycpu In CPUs
CPUInfo_ME = mycpu.ProcessorId
Next
End Function
Set CPUs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\ " & computer & "\root\cimv2 ").ExecQuery("select * from Win32_Processor ")
中有"自动化错误"