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






4.80/5 (8投票s)
2002年9月11日

260157

1877
这个类可以用来获取网卡适配器信息,例如MAC地址、IP地址、DHCP等。
引言
我提供了一个类 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
类不够健壮,无法用于严肃的应用,但希望有人可以修改它并使其更好!