Introduction
I provide you a class CxNetCardInfo
which can be used to get the local machine Netcard Adapter information such as IP address, MAC, DHCP, Subnet mask, WINS etc. For more detailed information, let's go to the next section.
How to use CxNetCardInfo
Usage of CxNetCardInfo
is easy! For example:
void CNetCardInfoDlg::OnButtonGetinfo()
{
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);
}
The CxNetCardInfo class
Header file
#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
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
Implementation file
#include "stdafx.h"
#include "NetCardInfo.h"
#include "xNetCardInfo.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
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 ) {
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;
}
Notes
The CxNetCardInfo
is not strong enough for serious usage, but someone can modify it and make it better hopefully!