问题
I am attempting to obtain mac address on windows xp using this code:
QString getMacAddress()
{
QString macaddress="??:??:??:??:??:??";
#ifdef Q_WS_WIN
PIP_ADAPTER_INFO pinfo=NULL;
unsigned long len=0;
unsigned long nError;
if (pinfo!=NULL)
delete (pinfo);
nError = GetAdaptersInfo(pinfo,&len); //Have to do it 2 times?
if(nError != 0)
{
pinfo= (PIP_ADAPTER_INFO)malloc(len);
nError = GetAdaptersInfo(pinfo,&len);
}
if(nError == 0)
macaddress.sprintf("%02X:%02X:%02X:%02X:%02X:%02X",pinfo->Address[0],pinfo->Address[1],pinfo->Address[2],pinfo->Address[3],pinfo->Address[4],pinfo->Address[5]);
#endif
return macaddress;
}
The code was suggested here: http://www.qtforum.org/post/42589/how-to-obtain-mac-address.html#post42589
What libraries should i include to make it work?.
回答1:
With Qt and the QtNetwork module, you can get one of the MAC addresses like that:
QString getMacAddress()
{
foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
{
// Return only the first non-loopback MAC Address
if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
return netInterface.hardwareAddress();
}
return QString();
}
回答2:
I was looking for the same and had some problems with virtual machines and different types of bearers, here's another approach that I found:
QNetworkConfiguration nc;
QNetworkConfigurationManager ncm;
QList<QNetworkConfiguration> configsForEth,configsForWLAN,allConfigs;
// getting all the configs we can
foreach (nc,ncm.allConfigurations(QNetworkConfiguration::Active))
{
if(nc.type() == QNetworkConfiguration::InternetAccessPoint)
{
// selecting the bearer type here
if(nc.bearerType() == QNetworkConfiguration::BearerWLAN)
{
configsForWLAN.append(nc);
}
if(nc.bearerType() == QNetworkConfiguration::BearerEthernet)
{
configsForEth.append(nc);
}
}
}
// further in the code WLAN's and Eth's were treated differently
allConfigs.append(configsForWLAN);
allConfigs.append(configsForEth);
QString MAC;
foreach(nc,allConfigs)
{
QNetworkSession networkSession(nc);
QNetworkInterface netInterface = networkSession.interface();
// these last two conditions are for omiting the virtual machines' MAC
// works pretty good since no one changes their adapter name
if(!(netInterface.flags() & QNetworkInterface::IsLoopBack)
&& !netInterface.humanReadableName().toLower().contains("vmware")
&& !netInterface.humanReadableName().toLower().contains("virtual"))
{
MAC = QString(netInterface.hardwareAddress());
break;
}
}
来源:https://stackoverflow.com/questions/7609953/obtaining-mac-address-on-windows-in-qt