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

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;


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值