65.9K
CodeProject 正在变化。 阅读更多。
Home

用于获取网卡适配器信息的类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (8投票s)

2002年9月11日

viewsIcon

260157

downloadIcon

1877

这个类可以用来获取网卡适配器信息,例如MAC地址、IP地址、DHCP等。

Sample Image - NetcardInfo.jpg

引言

我提供了一个类 CxNetCardInfo,它可以用来获取本地机器网卡适配器信息,例如IP地址、MAC地址、DHCP、子网掩码、WINS等。有关更详细的信息,请参阅下一节。

如何使用 CxNetCardInfo

CxNetCardInfo 的使用很简单!例如

void CNetCardInfoDlg::OnButtonGetinfo() 
{
  // TODO: Add your control notification handler code here
  CString tmp( _T("") );

  CxNetCardInfo NCI;

  tmp += _T("NetCard type:\t") + NCI.GetNetCardType() + _T("\r\n");
  tmp += _T("IP Address:\t") + NCI.GetNetCardIPAddress() + _T("\r\n" );
  tmp += _T("Subnet Mask:\t") + NCI.GetNetCardSubnetMask() + _T("\r\n");
  tmp += _T("Gateway:\t") + NCI.GetNetCardGateWay() + _T("\r\n");
  tmp += _T("DHCP Server:\t") + NCI.GetDHCPServer() + _T("\r\n");
  tmp += _T("MAC Address:\t") + NCI.GetNetCardMACAddress() + _T("\r\n");
  tmp += _T("Device name:\t") + NCI.GetNetCardDeviceName() + _T("\r\n");
  tmp += _T("Wins Server:\t") + NCI.GetNetCardWINS() + ("\r\n");
  tmp += NCI.GetErrorMsg() + _T("\r\n");

  CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT_INFO);
  pEdit->SetWindowText(tmp);
}

CxNetCardInfo 类

头文件

// xNetCardInfo.h: interface for the CxNetCardInfo class.
//
//////////////////////////////////////////////////////////////////////

#if 
 !defined(AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_)
#define AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CxNetCardInfo  
{
public:
  CxNetCardInfo();
  virtual ~CxNetCardInfo();

private:
  void ParseData();
  void GetInfo();

public:
  CString GetErrorMsg();
  CString GetNetCardWINS();
  CString GetNetCardDeviceName();
  CString GetNetCardMACAddress();
  CString GetDHCPServer();
  CString GetNetCardGateWay();
  CString GetNetCardSubnetMask();
  CString GetNetCardIPAddress();
  CString GetNetCardType();

private:
  BYTE m_data[4096];
  CString ErrMsg;
  CString macaddress;
  CString description;
  CString type;
  CString subnet;
  CString IpAddress;
  CString gateway;
  CString PrimaryWinsServer;
  CString dhcp;

  unsigned long len;
  PIP_ADAPTER_INFO pinfo;
};

#endif 
//!defined(AFX_XNETCARDINFO_H__FC408BC6_3516_4481_AF7E_0B875C0E2B2C__INCLUDED_)

实现文件

// xNetCardInfo.cpp: implementation of the CxNetCardInfo class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NetCardInfo.h"
#include "xNetCardInfo.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CxNetCardInfo::CxNetCardInfo()
{
  ErrMsg = _T( "" );

  macaddress = _T( "" );
  description = _T( "" );
  type = _T( "" );
  subnet = _T( "" );
  IpAddress = _T( "" );
  gateway = _T( "" );
  PrimaryWinsServer = _T( "" );
  dhcp = _T( "" );

  ZeroMemory( m_data,4096 );
  len = 0;
  pinfo = ( PIP_ADAPTER_INFO )m_data;

  GetInfo();
}

CxNetCardInfo::~CxNetCardInfo()
{

}

void CxNetCardInfo::GetInfo()
{
  ErrMsg = _T( "Success!" );

  unsigned long nError;

  nError = GetAdaptersInfo( pinfo,&len );

  switch( nError ) { // Not all return value processed here!
    case 0:
      ParseData();
      break;
    case ERROR_NO_DATA:
      ErrMsg = _T( "No net device information!" );
      break;
    case ERROR_NOT_SUPPORTED:
      ErrMsg = _T( "The system not support GetAdaptersInfo API function!" );
      break;
    case ERROR_BUFFER_OVERFLOW:
      nError = GetAdaptersInfo( pinfo,&len );
      if( nError == 0 ) ParseData();
      else ErrMsg = _T("Unknow error!");
      break;
  }
}

void CxNetCardInfo::ParseData()
{
  macaddress.Format( _T("%02X:%02X:%02X:%02X:%02X:%02X"),
    pinfo->Address[0],pinfo->Address[1],
    pinfo->Address[2],pinfo->Address[3],
    pinfo->Address[4],pinfo->Address[5] );
  description = pinfo->Description;
  type.Format(_T("%d"),pinfo->Type);

  PIP_ADDR_STRING pAddressList = &(pinfo->IpAddressList);
  IpAddress = _T("");
  do {
    IpAddress += pAddressList->IpAddress.String;
    pAddressList = pAddressList->Next;
    if( pAddressList != NULL ) IpAddress += _T( "\r\n" );
  }while( pAddressList != NULL );

  subnet.Format( _T("%s"),pinfo->IpAddressList.IpMask.String );
  gateway.Format( _T("%s"),pinfo->GatewayList.IpAddress.String );
  if( pinfo->HaveWins )
    PrimaryWinsServer.Format( _T("%s"),
      pinfo->PrimaryWinsServer.IpAddress.String );
  else
    PrimaryWinsServer.Format( _T("%s"),_T("N/A") );
  if( pinfo->DhcpEnabled )
    dhcp.Format( _T("%s"),pinfo->DhcpServer.IpAddress.String );
  else
    dhcp.Format( _T("%s"),_T("N/A") );
  pinfo = pinfo->Next;
}

CString CxNetCardInfo::GetNetCardType()
{
  return type;
}

CString CxNetCardInfo::GetNetCardIPAddress()
{
  return IpAddress;
}

CString CxNetCardInfo::GetNetCardSubnetMask()
{
  return subnet;
}

CString CxNetCardInfo::GetNetCardGateWay()
{
  return gateway;
}

CString CxNetCardInfo::GetDHCPServer()
{
  return dhcp;
}

CString CxNetCardInfo::GetNetCardMACAddress()
{
  return macaddress;
}

CString CxNetCardInfo::GetNetCardDeviceName()
{
  return description;
}

CString CxNetCardInfo::GetNetCardWINS()
{
  return PrimaryWinsServer;
}

CString CxNetCardInfo::GetErrorMsg()
{
  return ErrMsg;
}

注释

CxNetCardInfo 类不够健壮,无法用于严肃的应用,但希望有人可以修改它并使其更好!

© . All rights reserved.