欢迎来到山村网

如何通过VB获取网卡地址

2019-03-02 14:30:56浏览:358 来源:山村网   
核心摘要:  1)在Visual Basic生成标准的EXE文件。缺省创建 Form1。  2)在Form1中添加一命令按钮,缺省名为Command1。  3)把下列代码

  1)在Visual Basic生成标准的EXE文件。缺省创建 Form1。

  2)在Form1中添加一命令按钮,缺省名为Command1。

  3)把下列代码放到Form1中说明部分。

  Option Explicit

  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 'Integer

  ncb_retcode As Byte 'Integer

  ncb_lsn As Byte 'Integer

  ncb_num As Byte ' Integer

  ncb_buffer As Long 'String

  ncb_length As Integer

  ncb_callname As String * NCBNAMSZ

  ncb_name As String * NCBNAMSZ

  ncb_rto As Byte 'Integer

  ncb_sto As Byte ' Integer

  ncb_post As Long

  ncb_lana_num As Byte 'Integer

  ncb_cmd_cplt As Byte 'Integer

  ncb_reserve(9) As Byte ' Reserved, must be 0

  ncb_event As Long

  End Type

  Private Type ADAPTER_STATUS

  adapter_address(5) As Byte 'As String * 6

  rev_major As Byte 'Integer

  reserved0 As Byte 'Integer

  adapter_type As Byte 'Integer

  rev_minor As Byte 'Integer

  duration As Integer

  frmr_recv As Integer

  frmr_xmit As Integer

  if rame_recv_err As Integer

  xmit_aborts As Integer

  xmit_success As Long

  recv_success As Long

  if rame_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

  把下面的代码放入Command1_Click的事件中:

  Private Sub Command1_Click()

  Dim myNcb As NCB

  Dim bRet As Byte

  myNcb.ncb_command = NCBRESET

  bRet = Netbios(myNcb)

  myNcb.ncb_command = NCBASTAT

  myNcb.ncb_lana_num = 0

  myNcb.ncb_callname = "* "

  Dim myASTAT As ASTAT, tempASTAT As ASTAT

  Dim pASTAT As Long

  myNcb.ncb_length = Len(myASTAT)

  Debug.Print Err.LastDllError

  pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS or HEAP_ZERO_MEMORY, myNcb.ncb_length)

  If pASTAT = 0 Then

  Debug.Print "memory allcoation failed!"

  Exit Sub

  End If

  myNcb.ncb_buffer = pASTAT

  bRet = Netbios(myNcb)

  Debug.Print Err.LastDllError

  CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)

  MsgBox Hex(myASTAT.adapt.adapter_address(0)) & " " & Hex(myASTAT.adapt.adapter_address(1)) _

  & " " & Hex(myASTAT.adapt.adapter_address(2)) & " " _

  & Hex(myASTAT.adapt.adapter_address(3)) _

  & " " & Hex(myASTAT.adapt.adapter_address(4)) & " " _

  & Hex(myASTAT.adapt.adapter_address(5))

  HeapFree GetProcessHeap(), 0, pASTAT

  End Su

  5)点击Command1。注意,网卡地址将在一信息框中显示出来。

(责任编辑:豆豆)
下一篇:

浅谈Excel的VB编程

上一篇:

C语言中全局数组和局部数组的问题

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com