如何利用VB调出网卡的MAC地址?-+=急=+- 80分送上。

qinzhen 2000-08-07 12:24:00
加精
如何在VB中调出网卡MAC地址?我想了两个办法,但是都不理想。

1、将WIN98自带的WINIPCFG程序绑定到我自己的程序中,每次当我自己的程序启动时,同时启动 “winipcfg /all /batch c:\winipcfg.out" ,然后用我的程序在这个生成的字符文件中查找MAC地址。
问题是,我不知道VB中如何调用外部程序,所以我不知道如何将两个程序合在一起,而且使用参数。

2、调用WIN32 API 函数。根据MSDN显示,可以使用NETBIOS函数,可是这个函数要涉及到一个复杂的结构,其中又要用到大量的指针。我不知道如何在VB中构造这个结构。

还请高手指点一二。
...全文
782 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaozb 2001-02-28
  • 打赏
  • 举报
回复
lonelyme(),please
shaozb@363.net
javacoco 2001-02-10
  • 打赏
  • 举报
回复
用“winipcfg.exe /all /batch" & app.path & "\mac_add.txt" 再创建一个进程来执行winipcfg.exe,能后读取mac_add.txt中得到的mac-add.
lonelyMe 2001-02-07
  • 打赏
  • 举报
回复
本人可有这个组件,使用时只需注册这个组件,在VB中引用这个组件,然后加入如下码:
Public Function ReadMac() As String
Dim str As String * 16
Dim obj As New MACADDRLib.ADDR
str = obj.GetNCAddr
ReadMac = str
End Function
很方便!!本人在为公司的一个大软件加入的防盗版功能中使用此方法,效果甚好!
这个组件现低价出售!!
想买? 给我email.
大兔兔的脚 2000-12-13
  • 打赏
  • 举报
回复
写的好
我也拿走
qinzhen 2000-08-18
  • 打赏
  • 举报
回复
你所说的网卡序列号指的是网卡的MAC地址吗?
如果是的话,MAC地址是无法由你设置的,它是由厂家生产的时候固化在每块网卡里的。
MAC地址由专门的管理机构向各个网卡厂家授权发放,保证全世界的每块网卡都有唯一的地址。

jinkai 2000-08-18
  • 打赏
  • 举报
回复
那如何设定网卡的序列好呢?
jinkai 2000-08-18
  • 打赏
  • 举报
回复
那如何设定网卡的序列号呢?
TopHead 2000-08-07
  • 打赏
  • 举报
回复
下面的源码可以得到:)

Option Explicit
' 取得网卡以太地址
' 很多软件以取得网卡地址作为License验证,这不失为一个验证合法用户的好办法,不过要付出回复用户电话、传真的代价哦 ^_^
' 将下面这段代码拷贝到程序中,然后在你的程序需要的时候调用EthernetAddress(0),该函数返回的字符串就是您机器上网卡的以太序列号。
Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &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 ' Reserved, must be 0
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

Private Function EthernetAddress(LanaNumber As Long) As String
Dim udtNCB As NCB
Dim bytResponse As Byte
Dim udtASTAT As ASTAT
Dim udtTempASTAT As ASTAT
Dim lngASTAT As Long
Dim strOut As String
Dim x As Integer
udtNCB.ncb_command = NCBRESET
bytResponse = Netbios(udtNCB)
udtNCB.ncb_command = NCBASTAT
udtNCB.ncb_lana_num = LanaNumber
udtNCB.ncb_callname = "* "
udtNCB.ncb_length = Len(udtASTAT)
lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
strOut = ""
If lngASTAT Then
udtNCB.ncb_buffer = lngASTAT
bytResponse = Netbios(udtNCB)
CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
With udtASTAT.adapt
For x = 0 To 5
strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
Next x
End With
HeapFree GetProcessHeap(), 0, lngASTAT
End If
EthernetAddress = strOut
End Function

Private Sub Form_Click()
Me.Caption = EthernetAddress(0)
End Sub
qinzhen 2000-08-07
  • 打赏
  • 举报
回复
thank you :)
我正是要用网卡限制软件的使用,从而保证这个软件只能在一台机器上使用。

7,763

社区成员

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

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