VC获取网卡MAC

//方法一

 

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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值