//方法一
CString PrintMACaddress(unsigned char MACData[])
{
CString mac;
char MAC[40]={0};
sprintf(MAC,"XXXXXX", MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
mac=MAC;
return mac;
}
CString GetMACaddress(void)
{
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
//do {
//int i=0;
//PrintMACaddress(pAdapterInfo->Address);// Print MAC address
//pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
//i++;
//}
//while(pAdapterInfo); // Terminate if last adapter
if(pAdapterInfo)
return PrintMACaddress(pAdapterInfo->Address);
else
return _T("XXXXXXXXXX");
}
//方法二:在xp下有效,win7下无效
CString GetNetMac(void)
{
CString f_search="Physical Address";
BOOL f_result;
SECURITY_ATTRIBUTES f_sa;
HANDLE f_hReadPipe,f_hWritePipe;
CString f_mac="";
f_sa.nLength=sizeof(SECURITY_ATTRIBUTES);
f_sa.lpSecurityDescriptor=NULL;
f_sa.bInheritHandle=TRUE;
f_result=CreatePipe(&f_hReadPipe,&f_hWritePipe,&f_sa,0);
if(!f_result)
return f_mac;
STARTUPINFO f_si;
PROCESS_INFORMATION f_pi;
memset(&f_si,0,sizeof(STARTUPINFO));
f_si.cb=sizeof(STARTUPINFO);
GetStartupInfo(&f_si);
f_si.hStdError=f_hWritePipe;
f_si.hStdOutput=f_hWritePipe;
f_si.wShowWindow=SW_HIDE;
f_si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
f_result=CreateProcess(NULL,"ipconfig /all",NULL,NULL,true,0,NULL,NULL,&f_si,&f_pi);
char f_buffer[1000];
if(f_result)
{
WaitForSingleObject(f_pi.hProcess,INFINITE);
unsigned long f_count;
CloseHandle(f_hWritePipe);
memset(f_buffer,0x00,sizeof(f_buffer));
f_result=ReadFile(f_hReadPipe,f_buffer,1000,&f_count,0);
if(f_result)
{
f_mac=f_buffer;
long f_ipos=f_mac.Find(f_search);
if(f_ipos<0)
{
f_mac="";
}
else
{
f_mac=f_mac.Mid(f_ipos+1,100);
f_ipos=f_mac.Find(":");
f_mac=f_mac.Mid(f_ipos+2,17);
}
}
}
CloseHandle(f_pi.hProcess);
CloseHandle(f_pi.hThread);
CloseHandle(f_hReadPipe);
f_mac.Remove('-');
return f_mac;
}