解説
ネットワークアダプタの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;
}







