CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

请问如何判断计算机里只有一块网卡以及网卡的IP地址

楼主chinagod(繁星)2004-04-04 18:46:38 在 VB / 网络编程 提问

谢谢 问题点数:0、回复次数:3Top

1 楼MSTOP(陈建华)回复于 2004-04-04 21:47:45 得分 0

下面是一个遍历系统中安装的网卡并返回网卡MAC地址的代码:  
  Private   Function   MACAddress()   As   String  
   
        Set   objs   =   GetObject("winmgmts:").ExecQuery(   _  
              "SELECT   MACAddress   "   &   _  
              "FROM   Win32_NetworkAdapter   "   &   _  
              "WHERE   "   &   _  
              "((MACAddress   Is   Not   NULL)   "   &   _  
              "AND   (Manufacturer   <>   "   &   _  
              "注释:Microsoft注释:))")  
        For   Each   obj   In   objs  
              MACAddress   =   obj.MACAddress  
              Exit   For  
        Next   obj  
  End   Function  
  Top

2 楼MSTOP(陈建华)回复于 2004-04-04 21:48:32 得分 0

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  
    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_s   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   Sub  
   
  4)按F5,运行该程序。  
  5)点击Command1。注意,网卡地址将在一信息框中显示出来。Top

3 楼lizfhn(lzf)回复于 2004-04-04 22:06:00 得分 0

学习!UPTop

相关问题

  • 如何取得计算机中两张网卡的IP地址?(在线等待)
  • 网卡ip本机能ping通,其他局域网内计算机ping不通
  • 如何判断所输入的字符是本机的IP或计算机名?
  • 如何判断所输入的字符是本机的IP或计算机名?
  • 局域网内如何通过一台计算机的IP得知它的网卡信息!和物理位置!
  • 如何确定安装多块网卡的计算机使用哪个IP连接数据库服务器?
  • 加急加急,有谁知道怎么通过API获得本机网卡IP或者与我连接方计算机的网卡IP
  • 如何判断、设置网卡为自动获得ip地址?
  • 有无办法得到计算机ip地址,计算机名.还有判断某个文件在指定目录下是否存在
  • 两台没有IP的计算机(通过双网卡上网),如何通过winsock连接?如何填ip和port?

关键词

  • ncb
  • 网卡
  • macaddress
  • ncbnamsz
  • byte integer
  • obj
  • const
  • private
  • form

得分解答快速导航

  • 帖主:chinagod

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo