使用NetBIOS方法。该方法缺点:如果不插网线将无法获得网卡MAC#include <nb30.h> #pragma comment(lib, "Netapi32") // Get the MAC address of network adapter CString CYJQSDlg::GetMACAddr(void) { struct ASTAT { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff[30]; }Adapter; NCB ncb; UINT nRetCode; LANA_ENUM lana_enum; CString sMACAddrList, sTmp; ZeroMemory(&ncb, sizeof(ncb)); ncb.ncb_command = NCBENUM; ncb.ncb_buffer = (unsigned char*)&lana_enum; ncb.ncb_length = sizeof(lana_enum); //向网卡发送NCBENUM命令,以获取当前机器的网卡信息。如有多少个网卡、每张网卡的编号等 nRetCode = Netbios(&ncb); if (Netbios(&ncb)) return sMACAddrList; for (int i = 0; i <= lana_enum.length; i++) { //if there r more than one netcard, get MAC address of the first netcard. ZeroMemory(&ncb, sizeof(ncb)); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_enum.lana[i]; //指定网卡号 //首先对选定的网卡发送一个NCBRESET命令,以便进行初始化 Netbios(&ncb); ZeroMemory(&ncb, sizeof(ncb)); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_enum.lana[i]; //指定网卡号 strcpy((char*)ncb.ncb_callname, "* "); ncb.ncb_buffer = (unsigned char*)&Adapter; //指定返回的信息存放的变量 ncb.ncb_length = sizeof(Adapter); //发送NCBASTAT命令以获取网卡的信息 if (Netbios(&ncb)) return sMACAddrList; //continue; sTmp.Format(_T("%02X%02X%02X%02X%02X%02X|"), Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5] ); sMACAddrList += sTmp; } return sMACAddrList; } 通过GetAdaptersInfo函数。#pragma comment (lib, "IPHlpApi") // Get the MAC address of network adapter CString CYJQSDlg::GetMACAddr(void) { CString sMAC, sMACAddrList; PIP_ADAPTER_INFO pAdapterInfos = NULL; PIP_ADAPTER_INFO pAdapter = NULL; ULONG ulLen = 0; GetAdaptersInfo(pAdapterInfos, &ulLen); pAdapterInfos = new IP_ADAPTER_INFO[ulLen / sizeof(PIP_ADAPTER_INFO)]; if (GetAdaptersInfo(pAdapterInfos, &ulLen) == ERROR_SUCCESS) { pAdapter = pAdapterInfos; while (pAdapter) { sMAC.Format(L"%02X%02X%02X%02X%02X%02X|", pAdapter->Address[0], pAdapter->Address[1], pAdapter->Address[2], pAdapter->Address[3], pAdapter->Address[4], pAdapter->Address[5]); sMACAddrList += sMAC; pAdapter = pAdapter->Next; } } delete []pAdapterInfos; return sMACAddrList; }