MACアドレスの取得(I.P.Helper)

解説

 ネットワークアダプタのMACアドレス取得にはいくつかの方法がある。 「VC ++TIPS」にはここのものとは異なる方法での取得を紹介しています。
 ここではPlatform SDK(Internet Protocol Helper)を使用したMACアドレス取得 方法を紹介する。
 ビルドにはPlatform SDKのインストールが必須。

 この方法はWindows98以降に対応(Windows 95/NT4.0 非対応!)。


サンプル

void Test() 
{
	int		i;
	CString			strMessage;
	CStringArray	astrMacAddress;

	if(GetMacAddress(astrMacAddress) == false)
	{
		AfxMessageBox("取得できませんでした");
		return;
	}

	for(i = 0; i < astrMacAddress.GetSize(); i++)
	{
		strMessage += astrMacAddress[i];
		strMessage += "\n";
	}

	AfxMessageBox(strMessage);
}


取得部分

#include "afxtempl.h"
#include "iphlpapi.h"

#pragma comment(lib,"iphlpapi.lib") 

//
//	ビルド時 PMIB_ICMP_EX のエラーが出る場合は
//	iphlpapi.h内のGetIcmpStatisticsEx() をコメ
//	ントアウト!(どこで定義されてるの??)
//


//	Platform SDK: Internet Protocol Helper
//
//	GetAdaptersInfo() によるMACアドレスの取得
//
//		Windows98以降に対応(Windows 95/NT4.0 非対応!)
//
bool	GetMacAddress(CStringArray& astrMacAddress)
{
	ULONG				nOutBufLen;
	DWORD				ret;
	BYTE*				pBuff;
	PIP_ADAPTER_INFO	pAdapterInfo;
	CString				strBuff;

	astrMacAddress.RemoveAll();

	nOutBufLen = 0;
	::GetAdaptersInfo(NULL,&nOutBufLen);			//必要バッファサイズ取得

	pBuff = new BYTE[nOutBufLen];
	pAdapterInfo = (PIP_ADAPTER_INFO) pBuff;

	ret = ::GetAdaptersInfo(pAdapterInfo,&nOutBufLen);
	if(ret == ERROR_SUCCESS)
	{
		while(1)
		{
			strBuff.Format("%02X%02X%02X%02X%02X%02X\n"
					,pAdapterInfo->Address[0]
					,pAdapterInfo->Address[1]
					,pAdapterInfo->Address[2]
					,pAdapterInfo->Address[3]
					,pAdapterInfo->Address[4]
					,pAdapterInfo->Address[5]);
			astrMacAddress.Add(strBuff);

			pAdapterInfo = pAdapterInfo->Next;
			if(pAdapterInfo == NULL)
				break;
		}

	}
	delete	pBuff;

	if(astrMacAddress.GetSize() > 0)
		return	true;
	return	false;
}


カテゴリー「VC++ TIPS」 のエントリー