您的位置:首页 > 编程语言 > Qt开发

[Qt]获取Mac系统的有效网卡和序列号及硬件ID等信息(

2015-05-08 14:41 716 查看
Qt是一个挺不错的跨平台开发工具,可有时候想获取一些系统(特别是Mac系统)基本信息却并不是那么手到擒来


比如本文想获取Mac,序列号等信息就花费了好一番工夫,特记录于此以备不时之需。

说明:以下代码经Qt 5.3测试通过

//获取序列号
QProcess proc;
QStringList args;
args << "-c" << "ioreg -rd1 -c IOPlatformExpertDevice |  awk '/IOPlatformSerialNumber/ { print $3; }'";
proc.start( "/bin/bash", args );
proc.waitForFinished();
qDebug()<< proc.readAll(); //可以通过mid(1,11) 取得其中的序列号信息
//若是想获取硬件ID可把上面的 IOPlatformSerialNumber 改为 IOPlatformUUID 即可

//获取系统用户名,要#include <stdlib.h>
qDebug()<<getenv("USER");
//获取有效网卡,要#include <QtNetwork/QNetworkInterface>
QString  strMac;
QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();//获取所有网卡信息
for (int i = 0; i < ifaces.count(); i++)
{
QNetworkInterface iface = ifaces.at(i);
if ( iface.flags().testFlag(QNetworkInterface::IsUp) && iface.flags().testFlag(QNetworkInterface::IsRunning) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack))
{ //获取当前有效网卡
for (int j=0; j<iface.addressEntries().count(); j++) //这个循环很重要,读者可以尝试不用这个循环看看获取的是不是当前有效网卡:)
{
/* we have an interface that is up, and has an ip address
* therefore the link is present
* we will only enable this check on first positive,
* all later results are incorrect * * */
strMac = iface.hardwareAddress();
i = ifaces.count(); //跳出外层循环
break;
}
}
}
if(strMac.isEmpty()) { //有时候还是获取不到,所以这边再次尝试获取
foreach(QNetworkInterface iface,ifaces)
{
if(!iface.flags().testFlag(QNetworkInterface::IsLoopBack)) {
strMac = iface.hardwareAddress();
break;
}
}
}
qDebug()<<strMac;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐