明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1666|回复: 3

在XP或WIN2000中怎样用VB得到计算机的网卡号

[复制链接]
发表于 2007-8-2 21:13:00 | 显示全部楼层 |阅读模式

求救:

在XP或WIN2000中怎样用VB得到计算机的网卡号?以前我有一段代码在W98中好使,但在XP或Win2000中运行时,网卡号总是由0组成的,这是为什么?请高手赐教

发表于 2007-8-8 12:44:00 | 显示全部楼层
关注中,想在VBA中实现——
发表于 2007-8-24 12:36:00 | 显示全部楼层

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
     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 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
    
     Form1.Text1.Text = (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))
 Dim pangduan As String
     pangduan = "0 17 31 B5 AF C"
 'If Form2.Text1(0).Text = pangduan Then
    ' Form2.Command1.Enabled = True
 'Else
   ' MsgBox "对不起,您的网卡地址有误,请重新获取或检查网络配置"
 'End If

End Sub

 楼主| 发表于 2007-8-26 16:16:00 | 显示全部楼层

我试了以上代码,但显示的是"0 0 0 0 0 0",我的机子XP系统,请赐教.多谢

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 12:21 , Processed in 0.156293 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表