QT5 获取mac地址和cpu序列号

  1 #include <QCoreApplication>
  2 #include <QStringList>
  3 #include <QString>
  4 #include <qdebug.h>
  5 #include <QNetworkInterface>
  6
  7 #ifdef __GNUC__
  8 #include <cpuid.h>
  9 #elif defined(_MSC_VER)
 10 #if _MSC_VER >= 1400
 11 #include <intrin.h>
 12 #endif
 13 #else
 14 #error Only supports MSVC or GCC
 15 #endif
 16
 17 QStringList get_mac();
 18 void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType);
 19 void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue);
 20 QString get_cpuId();
 21
 22 int main(int argc, char *argv[])
 23 {
 24     QCoreApplication a(argc, argv);
 25     //测试cpu_id
 26     QString cpu_id = "";
 27     cpu_id = get_cpuId();
 28     qDebug() << cpu_id;
 29     //测试mac
 30     QStringList mac_list;
 31     mac_list = get_mac();
 32     for (int i=0; i<mac_list.size(); i++)
 33     {
 34         qDebug() << mac_list.at(i);
 35     }
 36     return a.exec();
 37 }
 38
 39 //获取机器mac地址
 40 QStringList get_mac()
 41 {
 42     QStringList mac_list;
 43     QString strMac;
 44     QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
 45     for (int i=0; i<ifaces.count(); i++)
 46     {
 47         QNetworkInterface iface = ifaces.at(i);
 48         //过滤掉本地回环地址、没有开启的地址
 49         if (iface.flags().testFlag(QNetworkInterface::IsUp) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack))
 50         {
 51             //过滤掉虚拟地址
 52             if (!(iface.humanReadableName().contains("VMware",Qt::CaseInsensitive)))
 53             {
 54                 strMac = iface.hardwareAddress();
 55                 mac_list.append(strMac);
 56             }
 57         }
 58     }
 59     return mac_list;
 60 }
 61
 62 //获取机器cpuId
 63 QString get_cpuId()
 64 {
 65     QString cpu_id = "";
 66     unsigned int dwBuf[4];
 67     unsigned long long ret;
 68     getcpuid(dwBuf, 1);
 69     ret = dwBuf[3];
 70     ret = ret << 32;
 71     cpu_id = QString::number(dwBuf[3], 16).toUpper();
 72     cpu_id = cpu_id + QString::number(dwBuf[0], 16).toUpper();
 73     return cpu_id;
 74 }
 75
 76 void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType)
 77 {
 78 #if defined(__GNUC__)// GCC
 79     __cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
 80 #elif defined(_MSC_VER)// MSVC
 81 #if _MSC_VER >= 1400 //VC2005才支持__cpuid
 82     __cpuid((int*)(void*)CPUInfo, (int)(InfoType));
 83 #else //其他使用getcpuidex
 84     getcpuidex(CPUInfo, InfoType, 0);
 85 #endif
 86 #endif
 87 }
 88
 89 void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue)
 90 {
 91 #if defined(_MSC_VER) // MSVC
 92 #if defined(_WIN64)    // 64位下不支持内联汇编. 1600: VS2010, 据说VC2008 SP1之后才支持__cpuidex.
 93     __cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue);
 94 #else
 95     if (NULL==CPUInfo)    return;
 96     _asm{
 97         // load. 读取参数到寄存器.
 98         mov edi, CPUInfo;
 99         mov eax, InfoType;
100         mov ecx, ECXValue;
101         // CPUID
102         cpuid;
103         // save. 将寄存器保存到CPUInfo
104         mov    [edi], eax;
105         mov    [edi+4], ebx;
106         mov    [edi+8], ecx;
107         mov    [edi+12], edx;
108     }
109 #endif
110 #endif
111 }
时间: 2024-08-02 19:14:07

QT5 获取mac地址和cpu序列号的相关文章

C#获取MAC地址

/// <summary> /// 获取MAC地址(返回第一个物理以太网卡的mac地址) /// </summary> /// <returns>成功返回mac地址,失败返回null</returns> public string getMacAddress() { string macAddress = null; try { NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterface

Python windows下获取MAC地址的一种方法

我最近有一个项目,使用Python在win32下开发一个COM组建,该COM组建其中一个方法是获取本地电脑的MAC地址. 需求很简单,虽然我是Python新手中的新手,但我还是会使用搜索引擎进行搜索. 百度一下,发现大部分都介绍使用import UUID获取MAC地址,或使用os.popen("ipconfig /all")的方式获取.而后者容易受到操作系统中英文环境影响. 如这篇文章:http://www.cnblogs.com/Jerryshome/archive/2011/11/

android 获取MAC地址

由于WiFi 的Mac address 是一个被动咨询.一般在开机后,不会主动上到的系统里.要等待WiFi硬件启动后,才会把有关Mac address资料记载入系统去. 所以一般android系统获取Mac address时候会出现以下几种情况: 1.在WiFi打开的时候可以获取到Mac地址 2.关闭WiFi,不重启系统,也可以获取到Mac address 3.系统重启后,不打开WiFi,获取不到Mac address 4.系统重启后,不开开WiFi,打开2G.3G网络,获取不到Mac addr

android获取Mac地址和IP地址

获取Mac地址实际项目中测试了如下几种方法:(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据Wifi信息获取本地Mac public static String getLocalMacAddressFromWifiInfo(Context context){ WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_

C#获取MAC地址的几种方法

首先需要用到的一些方法和类: public enum NCBCONST { NCBNAMSZ = 16, MAX_LANA = 254, NCBENUM = 0x37, NRC_GOODRET = 0x00, NCBRESET = 0x32, NCBASTAT = 0x33, NUM_NAMEBUF = 30, } [StructLayout(LayoutKind.Sequential)] public struct ADAPTER_STATUS { [MarshalAs(UnmanagedTy

【转载】获取MAC地址方法大全

From:http://blog.csdn.net/han2814675/article/details/6223617 Windows平台下用C++代码取得机器的MAC地址并不是一件简单直接的事情.到目前为止,作者尚未发现有任何一个通用的100%的适用于所有Windows平台的方法可以稳定的取得MAC地址.而有些应用(比如MMORPG)则需要稳定的得到机器的MAC地址,解决方案往往是通过多种方法依次使用来提高成功率. 说明: 以下方法只会返回多网卡的第一个MAC地址. 网上有很多文章和源码来解

C# 获取mac地址 本机或者 远程的

/// 获取本机网卡mac地址代码 /// </summary> /// <returns></returns> /// /// <summary> public string GetNetworkAdpaterID() { try { string mac = ""; System.Management.ManagementClass mc = new System.Management.ManagementClass("Wi

Delphi 获取MAC 地址

function GetMacAddress(index:integer):string;var   ncb : TNCB;                {NetBios控制块}   AdapterS : TAdapterStatus; {网卡状态结构}   LanaNum : TLanaeNum;       {Netbios Lana}   i : integer;   rc : Char;                 {NetBios的返回代码}   str : String;beg

java获取mac地址-屏蔽ip封mac地址

首先要说的是:可以支持外网机器的mac地址获取.  以前弄了一个只能访问局域网. 有防火墙就访问不了, 但是这个不用担心了. 测试了百度的ip,已经可以获得mac地址 测试效果图: java通过ip获取mac地址-封ip封mac地址 版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载.