程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 如何通過VB獲取網卡地址

如何通過VB獲取網卡地址

編輯:更多關於編程

       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。注意,網卡地址將在一信息框中顯示出來。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved