C++怎么快速获取电脑CPU唯一序列号机器码呢?

2023-8-1 10:25 312 0
简介
#include stdio.h #include windows.h #include cpuid.h int main() { unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0; __cpuid(1, eax, ebx, ecx, edx); printf("ProcessorId: %08X%08X\n", edx, eax); // c ...
#include <stdio.h>
#include <windows.h>
#include <cpuid.h>
int main()
{
    unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
    __cpuid(1, eax, ebx, ecx, edx);
    printf("ProcessorId:  %08X%08X\n", edx, eax); // cpuid 格式同 wmic cpu get processorid
    printf("CPU Features: %08X-%08X-%08X-%08X\n", eax, ebx, ecx, edx);
 
    DWORD serial_number = 0;
    char file_system_name[MAX_PATH + 1] = "";
    if (GetVolumeInformation("C:\\", NULL, MAX_PATH + 1, &serial_number,
                             NULL, NULL, file_system_name, MAX_PATH + 1))
        printf("Hard Disk ID: %08X\t%s\n", serial_number, file_system_name);
    else
        perror("GetVolumeInformation");
}

编译运行后,再打开 DiskGenius 磁盘工具 和 使用  wmic cpu get processorid 验证结果还算正确


第二种方法:使用 Windows API 获得UUID

#include <windows.h>
#include <stdio.h>
int main()
{
    UUID uuid;
    UuidCreate(&uuid);   // 使用 Windows API 中的 UuidCreate() 函数来生成 UUID
 
//  UUID: 07e4bca4-61f2-4485-aed2-9fea6de42d48    // 需要链接库 librpcrt4.a
    char *uuid_str;
    UuidToStringA(&uuid, (RPC_CSTR*)&uuid_str);   // 为 UUID 字符串分配动态内存
    printf("UUID: %s\n", uuid_str);
    RpcStringFreeA((RPC_CSTR*)&uuid_str);         // 释放 UUID 字符串动态内存
    return 0;
}
以上代码 使用 TDM-GCC 10.2 编译, MSVC 可能要高一点的版本

MSVC 2010 使用 intrin.h 头文件和  __cpuid 函数。因此,如果您使用的是 MSVC 2010 及更高版本,应该可以使用 intrin.h头文件。

请注意,intrin.h 只在 Windows 操作系统下可用,并且需要基于 x86 或 x64 架构的 CPU 才能使用 CPUID 指令。此外,intrin.h 头文件是针对特定的编译器实现的,可能不会在其他编译器上工作。
第三种方法:更加简单:
#include <stdio.h>
#include <intrin.h>  // MSVC 2010 使用 intrin.h 头文件和  __cpuid 函数
 
int main()
{
    int info[4];
    __cpuid(info, 1);  // 获取 CPU ID
 
    printf("ProcessorId:  %08X%08X\n", info[3], info[0]); // cpuid 格式同 wmic cpu get processorid
    printf("CPU Features: %08X-%08X-%08X-%08X\n", info[0], info[1], info[2], info[3]);
    return 0;
}

这段代码使用了Windows系统的一个内置函数库intrin.h,其中包含了一些CPU指令的内部函数,可以直接调用CPU的一些特殊指令来获取CPU的一些信息。在这个程序中,__cpuid函数是用来获取CPU详细信息的。__cpuid函数会返回一组包含四个整型数的信息,这四个数依次代表CPU类型、CPU家族、CPU模型和CPU特性。这些信息可以被存储在一个长度为4的数组中,这里的数组info就是用来存储这些信息的。接下来,程序使用printf函数输出CPU的ID和特性。info[3]和info[0]分别代表CPU类型和CPU特性,因此第一个printf语句输出CPU的ID。第二个printf语句中,info[0]、info[1]、info[2]和info[3]依次代表CPU特性的四个部分,因此输出的是CPU特性的四个十六进制数。最后,程序返回0表示正常结束。







鲜花

握手

雷人

路过

鸡蛋

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1