如何通过VB获取网卡地址

    技术2022-05-11  137

    1)在Visual Basic生成标准的EXE文件。缺省创建 Form1。2)在Form1中添加一命令按钮,缺省名为Command1。3)把下列代码放到Form1中说明部分。Option ExplicitPrivate Const NCBASTAT = &H33Private Const NCBNAMSZ = 16Private Const HEAP_ZERO_MEMORY = &H8Private Const HEAP_GENERATE_EXCEPTIONS = &H4Private Const NCBRESET = &H32Private 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 LongEnd TypePrivate 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  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 IntegerEnd TypePrivate Type NAME_BUFFER  name As String * NCBNAMSZ  name_num As Integer  name_flags As IntegerEnd TypePrivate Type ASTAT  adapt As ADAPTER_STATUS  NameBuff(30) As NAME_BUFFEREnd TypePrivate Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As BytePrivate 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 LongPrivate Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As LongPrivate 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, pASTATEnd Su5)点击Command1。注意,网卡地址将在一信息框中显示出来。

    最新回复(0)