用什么方法取得网卡的mac地址,或者是硬盘的序列号也可

ltylty 2005-09-26 09:28:02
程序中要用的这个
但是在网上找了个程序,发现在取得笔记本的pcmic网卡的时候,取不到地址

所以问问各位,多谢
...全文
320 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijiechuan 2005-10-10
  • 打赏
  • 举报
回复
樓上用的vb代碼網上普遍流傳,可惜是錯的....
CopyMemory AST, NCB.ncb_buffer, Len(AST)
NCB.ncb_buffer不加byval等於是把原本裝著網卡地址的地址當作網卡地址計算...哈哈...
盡信網不如無網....
kmzs 2005-10-01
  • 打赏
  • 举报
回复
硬盘序号可以用巴顿的算法,一般网卡的Mac地址可以在Windows管理工具里面直接修改。部分笔记本子带的不行
ltylty 2005-10-01
  • 打赏
  • 举报
回复
但是上面的哥们给的程序取pc机器上的就可以,但是笔记本的网卡的地址也是 00 00 00 00 00 00啊
rokky 2005-09-30
  • 打赏
  • 举报
回复
上面这位兄台这个只能取到一块网卡的mac,如果有两块网卡就无能为力了.

Shell(commpath & "command.com /c" & " ipconfig /all >c:\maclog.txt", vbHide)

然后读取生成的文本中的mac 地址就可以了,将全部为数字的mac地址过滤掉.
killl 2005-09-30
  • 打赏
  • 举报
回复

VB中如何取得网卡的mac地址

来源: 月光软件讨论区
阅读:6611 次
日期:2004-7-30
模块中的内容
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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,&nb sp;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
&nb! sp; 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_un! avail As Integer
max_dgram_size& nbsp; 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, B yVal dwFlags As Long, lpMem As Any) As Long


Public Function GetMACAddress() As String

Dim tmp As String
Dim pASTAT As Long
Dim NCB As NET_CONTROL_BLOCK
Dim AST As ASTAT
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 _
&! nbsp; 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") & "! ; " & _
&nbs p; 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 = tmp

End Function

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你只要在程序中调用GetMACAddress()就可以了!


上官云峰 2005-09-30
  • 打赏
  • 举报
回复
Option Explicit
Private Sub Command1_Click()
Text1.text = GetMACAddress
End Sub

Option Explicit

Public CheckCode As Long

Private Const NCBASTAT As Long = &H33
Private Const NCBNAMSZ As Integer = 16
Private Const HEAP_ZERO_MEMORY As Long = &H8
Private Const HEAP_GENERATE_EXCEPTIONS As Long = &H4
Private Const NCBRESET As Long = &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
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

Public Function GetMAC() As Integer


Dim bRet As Byte
Dim myNcb As NCB
Dim myASTAT As ASTAT
Dim pASTAT As Long
Dim intMAC As Integer

myNcb.ncb_command = NCBRESET
bRet = Netbios(myNcb)
With myNcb
.ncb_command = NCBASTAT
.ncb_lana_num = 0
.ncb_callname = "* "
.ncb_length = Len(myASTAT)
pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, .ncb_length)
End With
If pASTAT = 0 Then
Exit Function
End If
myNcb.ncb_buffer = pASTAT
bRet = Netbios(myNcb)
CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
intMAC = myASTAT.adapt.adapter_address(0)
intMAC = intMAC + myASTAT.adapt.adapter_address(1)
intMAC = intMAC + myASTAT.adapt.adapter_address(2)
intMAC = intMAC + myASTAT.adapt.adapter_address(3)
intMAC = intMAC + myASTAT.adapt.adapter_address(4)
intMAC = intMAC + myASTAT.adapt.adapter_address(5)
GetMAC = intMAC
Call HeapFree(GetProcessHeap(), 0, pASTAT)

End Function

Public Function GetMACAddress() As String


Dim bRet As Byte
Dim myNcb As NCB
Dim myASTAT As ASTAT
Dim pASTAT As Long
myNcb.ncb_command = NCBRESET
bRet = Netbios(myNcb)
With myNcb
.ncb_command = NCBASTAT
.ncb_lana_num = 0
.ncb_callname = "* "
.ncb_length = Len(myASTAT)
pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, .ncb_length)
End With
If pASTAT = 0 Then
Exit Function
End If
myNcb.ncb_buffer = pASTAT
bRet = Netbios(myNcb)
CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
GetMACAddress = HexEx(myASTAT.adapt.adapter_address(0)) & "-" & HexEx(myASTAT.adapt.adapter_address(1)) & "-" & HexEx(myASTAT.adapt.adapter_address(2)) & "-" & HexEx(myASTAT.adapt.adapter_address(3)) & "-" & HexEx(myASTAT.adapt.adapter_address(4)) & "-" & HexEx(myASTAT.adapt.adapter_address(5))
Call HeapFree(GetProcessHeap(), 0, pASTAT)

End Function

Private Function HexEx(ByVal B As Long) As String

Dim aa As String

aa = Hex$(B)
If Len(aa) < 2 Then
aa = "0" & aa
End If
HexEx = aa

End Function


ltylty 2005-09-29
  • 打赏
  • 举报
回复
可是我用了发现,在笔记本上还是显示不出来笔记本网卡的号啊,

显示出来的是 00 00 00 00 00 00

这个是怎么回事呢,望那位大虾教教
xghim 2005-09-29
  • 打赏
  • 举报
回复
Set objWMIService = objwbemLocator.ConnectServer(strComputer, "root\cimv2", strUser, strPWD)
List1.Clear
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter", , 48)
For Each objItem In colItems
List1.AddItem "AdapterType: " & objItem.AdapterType
List1.AddItem "AutoSense: " & objItem.AutoSense
List1.AddItem "Availability: " & objItem.Availability
List1.AddItem "Caption: " & objItem.Caption
List1.AddItem "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
List1.AddItem "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
List1.AddItem "CreationClassName: " & objItem.CreationClassName
List1.AddItem "Description: " & objItem.Description
List1.AddItem "DeviceID: " & objItem.DeviceID
List1.AddItem "ErrorCleared: " & objItem.ErrorCleared
List1.AddItem "ErrorDescription: " & objItem.ErrorDescription
List1.AddItem "Index: " & objItem.Index
List1.AddItem "InstallDate: " & objItem.InstallDate
List1.AddItem "Installed: " & objItem.Installed
List1.AddItem "LastErrorCode: " & objItem.LastErrorCode
List1.AddItem "MACAddress: " & objItem.MACAddress
List1.AddItem "Manufacturer: " & objItem.Manufacturer
List1.AddItem "MaxNumberControlled: " & objItem.MaxNumberControlled
List1.AddItem "MaxSpeed: " & objItem.MaxSpeed
List1.AddItem "Name: " & objItem.Name
List1.AddItem "NetworkAddresses: " & objItem.NetworkAddresses
List1.AddItem "PermanentAddress: " & objItem.PermanentAddress
List1.AddItem "PNPDeviceID: " & objItem.PNPDeviceID
List1.AddItem "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
List1.AddItem "PowerManagementSupported: " & objItem.PowerManagementSupported
List1.AddItem "ProductName: " & objItem.ProductName
List1.AddItem "ServiceName: " & objItem.ServiceName
List1.AddItem "Speed: " & objItem.Speed
List1.AddItem "Status: " & objItem.Status
List1.AddItem "StatusInfo: " & objItem.StatusInfo
List1.AddItem "SystemCreationClassName: " & objItem.SystemCreationClassName
List1.AddItem "SystemName: " & objItem.SystemName
List1.AddItem "TimeOfLastReset: " & objItem.TimeOfLastReset
List1.AddItem "------------------------------------------------------------------------"
Next
vansoft 2005-09-29
  • 打赏
  • 举报
回复
用WMI來取,98需要安裝WMI。
duyhui 2005-09-26
  • 打赏
  • 举报
回复
楼上的内容不错
northwolves 2005-09-26
  • 打赏
  • 举报
回复
http://www.vbnew.net/artcile/list.asp?Unid=1206

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧