Qt获取CPU序列号(最简单的方式)
2017-05-17 23:36
549 查看
前言
对于windows系统下获取CPU序列号,网上有很多方式,通过C++调用windows的接口可以实现,不过代码都很复杂,不易理解,并且还还不一定能成功。这里用一种非常简单的方式去获取CPU序列号,通过Qt的接口,代码超级简单,不超过十行。正文
查看CPU序列号的方式很多,可以通过命令行查询,或者借助第三方软件查看,那么,这里要用到的方式就是在程序中通过执行命令行来获取。需要用刀Qt的类QProcess代码如下:
QString cpu_id = ""; QProcess p(0); p.start("wmic CPU get ProcessorID"); p.waitForStarted(); p.waitForFinished(); cpu_id = QString::fromLocal8Bit(p.readAllStandardOutput()); cpu_id = cpu_id.remove("ProcessorId").trimmed();
代码最后一行经过对输出的终端信息进行处理 最终得到单独的CPU序列号信息。
以上方式可能在某些机子上无法正常获取,接下来通过一种复杂的方式来获取 CPU 序列号。
直接上代码
static void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType); static void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue); static QString get_cpuId(); QString get_cpuId() { QString cpu_id = ""; unsigned int dwBuf[4]={0}; unsigned long long ret = 0; getcpuid(dwBuf, 1); ret = dwBuf[3]; ret = ret << 32; QString str0 = QString::number(dwBuf[3], 16).toUpper(); QString str0_1 = str0.rightJustified(8,'0');//这一句的意思是前面补0,但是我遇到的情况是这里都填满了 QString str1 = QString::number(dwBuf[0], 16).toUpper(); QString str1_1 = str1.rightJustified(8,'0');//这里必须在前面补0,否则不会填满数据 //cpu_id = cpu_id + QString::number(dwBuf[0], 16).toUpper(); cpu_id = str0_1 + str1_1; return cpu_id; } void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType) { #if defined(__GNUC__)// GCC __cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]); #elif defined(_MSC_VER)// MSVC #if _MSC_VER >= 1400 //VC2005才支持__cpuid __cpuid((int*)(void*)CPUInfo, (int)(InfoType)); #else //其他使用getcpuidex getcpuidex(CPUInfo, InfoType, 0); #endif #endif } void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue) { #if defined(_MSC_VER) // MSVC #if defined(_WIN64) // 64位下不支持内联汇编. 1600: VS2010, 据说VC2008 SP1之后才支持__cpuidex. __cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue); #else if (NULL==CPUInfo) return; _asm{ // load. 读取参数到寄存器. mov edi, CPUInfo; mov eax, InfoType; mov ecx, ECXValue; // CPUID cpuid; // save. 将寄存器保存到CPUInfo mov [edi], eax; mov [edi+4], ebx; mov [edi+8], ecx; mov [edi+12], edx; } #endif #endif }
相关文章推荐
- Qt中获取CPU的序列号
- QT5 获取mac地址和cpu序列号
- Qt获取CPU序列号,亲测可用
- ASP.NET获取CPU序列号,硬盘序列号ID,获取网卡编号
- 获取cpu序列号,硬盘ID,网卡MAC地址
- Asp.net关于获取客户端CPU,硬盘,MAC序列号的问题
- 获取cpu序列号,硬盘ID,网卡MAC地址
- ASP.NET中获取cpu序列号
- C#如何获取CPU序列号,或者更多……
- 获取cpu序列号,硬盘ID,网卡MAC地址(转载)
- 使用WMI来获取CPU序列号
- 【转载】.net关于获取客户端CPU,硬盘,MAC序列号的问题
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- 获取cpu序列号,硬盘ID,网卡MAC地址
- 获取cpu序列号
- ASP.NET获取CPU序列号,硬盘序列号ID,获取网卡编号
- Java获取CPU序列号和网卡Mac地址
- 获取cpu序列号,硬盘ID,网卡MAC地址
- 如何获取多核、多cpu系统中指定cpu的序列号
- 使用WMI来获取CPU序列号