如果机器装了一块以上的网卡,在2000下通过调用GetAdaptersInfo()函数返回一个结构体,根据其中的AdapterName到注册表中保存网卡信息的键下,通过枚举子键就可得到网卡的型号,但是在98下通过调用此函数返回的AdapterName值为空,那应该怎么样得到网卡的型号呢?
哪位兄弟做过的请指教一下!

解决方案 »

  1.   

    如果装有netbios协议可以用下面的代码得到:(很多人问过了,代码都是查不错的)
    typedef struct _ASTAT_
    {
    ADAPTER_STATUS adapt;
    NAME_BUFFER    NameBuff[30];
    } ASTAT, * PASTAT;   CString sNetBiosName=GetLocalIP();
      
      strcpy(ip,sNetBiosName);
      
      int maccounter=0;
      CString strMacAddr;
      ASTAT Adapter;
      NCB ncb;
      UCHAR uRetCode;
      LANA_ENUM lana_enum;
      memset(&ncb, 0, sizeof(ncb));
      ncb.ncb_command=NCBENUM;//发送命令查询网卡数目
      ncb.ncb_buffer=(unsigned char*)&lana_enum;
      ncb.ncb_length=sizeof(lana_enum);
      uRetCode=Netbios(&ncb);
      if(uRetCode==0)
      {
      maccounter=lana_enum.length;
      for(int maci=0;maci<maccounter;maci++)
      {   
      ncb.ncb_command = NCBRESET;//重置网卡
      ncb.ncb_lana_num = maci;//指定网卡编号
      uRetCode = Netbios(&ncb);
      memset(&ncb, 0, sizeof(ncb));
      ncb.ncb_command = NCBASTAT;//获取网卡状态
      ncb.ncb_lana_num = maci;
      sNetBiosName.MakeUpper();
      FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20);
      strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName);
      ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20;
      ncb.ncb_callname[NCBNAMSZ] = 0x0;
      ncb.ncb_buffer = (unsigned char *) &Adapter;
      ncb.ncb_length = sizeof(Adapter);
      uRetCode = Netbios(&ncb);
      CString sMacAddress;
      if (uRetCode == 0)
      {
      sMacAddress.Format(_T("  网卡%d:%02x%02x%02x%02x%02x%02x"),
      maci+1,
      Adapter.adapt.adapter_address[0],
      Adapter.adapt.adapter_address[1],
      Adapter.adapt.adapter_address[2],
      Adapter.adapt.adapter_address[3],
      Adapter.adapt.adapter_address[4],
      Adapter.adapt.adapter_address[5]);
      }
      strMacAddr+=sMacAddress;
      strMacAddr+="   \r\n";
      }
      }
      strcpy(mac,strMacAddr);
      

  2.   

    sorry,看错你的要求了。
    这两个地方也许对你有帮助
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39046680,00.htm
    http://www.copathway.com/vchelp/file2002_2/ViewAdapterInfo.zip
      

  3.   

    谢谢楼上的。
    看过了没什么用,上面说的我都知道,而且在WIN2000下我所有的网卡信息都能得到,WIN98下也能得到IP、物理地址之类的,就差网卡型号名称了。
      

  4.   

    打开注册表总可以吧?反正都是反正注册表里的,tcp/ip那里
      

  5.   

    注册表里确实保存了网卡的型号信息,我也看过了,但那里一般都有6、7种型号(诸如网络适配器之类的型号),我们打开注册表来看知道哪个键是网卡的型号,但程序不知道啊,注册表中又没有明显的标志来说明哪个键就是实际网卡?
       在2000系统中通过上面所说的GetAdaptersInfo()函数就可得到实际网卡的一个标志字符串,然后根据这个标志就可以到注册表中去查询。但在98系统下就不是这样。真是郁闷啊。
        真的就没有哪位大哥知道吗?