C++ 硬件信息 获取CPU序列号

获取计算机CPU序列号的方法很多,这里采用的是命令行的形式获取,可以获取CPU的序列号,很简单,直接上代码。

【1】头文件

#if !defined(AFX_14BEC153_17B9_47BE_845F_71A27BF26B59__INCLUDED_)
#define AFX_14BEC153_17B9_47BE_845F_71A27BF26B59__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

//--------------------------------------------------------------
//						CPU序列号
//--------------------------------------------------------------
BOOL GetCpuByCmd(char *lpszCpu, int len=128);

#endif // !defined(AFX_14BEC153_17B9_47BE_845F_71A27BF26B59__INCLUDED_)

【2】CPP

#include "stdafx.h"
#include "CpuID.h"

//--------------------------------------------------------------
//						CPU序列号
//--------------------------------------------------------------
BOOL GetCpuByCmd(char *lpszCpu, int len/*=128*/)
{
    const long MAX_COMMAND_SIZE = 10000; // 命令行输出缓冲大小
    WCHAR szFetCmd[] = L"wmic cpu get processorid"; // 获取CPU序列号命令行
    const string strEnSearch = "ProcessorId"; // CPU序列号的前导信息

    BOOL   bret = FALSE;
    HANDLE hReadPipe = NULL; //读取管道
    HANDLE hWritePipe = NULL; //写入管道
    PROCESS_INFORMATION pi;   //进程信息
    STARTUPINFO			si;	  //控制命令行窗口信息
    SECURITY_ATTRIBUTES sa;   //安全属性

    char			szBuffer[MAX_COMMAND_SIZE + 1] = { 0 }; // 放置命令行结果的输出缓冲区
    string			strBuffer;
    unsigned long	count = 0;
    long			ipos = 0;

    memset(&pi, 0, sizeof(pi));
    memset(&si, 0, sizeof(si));
    memset(&sa, 0, sizeof(sa));

    pi.hProcess = NULL;
    pi.hThread = NULL;
    si.cb = sizeof(STARTUPINFO);
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;

    //1.0 创建管道
    bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
    if (!bret)
    {
        goto END;
    }

    //2.0 设置命令行窗口的信息为指定的读写管道
    GetStartupInfo(&si);
    si.hStdError = hWritePipe;
    si.hStdOutput = hWritePipe;
    si.wShowWindow = SW_HIDE; //隐藏命令行窗口
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

    //3.0 创建获取命令行的进程
    bret = CreateProcess(NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
    if (!bret)
    {
        goto END;
    }

    //4.0 读取返回的数据
    WaitForSingleObject(pi.hProcess, 500/*INFINITE*/);
    bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0);
    if (!bret)
    {
        goto END;
    }

    //5.0 查找CPU序列号
    bret = FALSE;
    strBuffer = szBuffer;
    ipos = strBuffer.find(strEnSearch);

    if (ipos < 0) // 没有找到
    {
        goto END;
    }
    else
    {
        strBuffer = strBuffer.substr(ipos + strEnSearch.length());
    }

    memset(szBuffer, 0x00, sizeof(szBuffer));
    strcpy_s(szBuffer, strBuffer.c_str());

    //去掉中间的空格 \r \n
    int j = 0;
    for (int i = 0; i < strlen(szBuffer); i++)
    {
        if (szBuffer[i] != ' ' && szBuffer[i] != '\n' && szBuffer[i] != '\r')
        {
            lpszCpu[j] = szBuffer[i];
            j++;
        }
    }

    bret = TRUE;

END:
    //关闭所有的句柄
    CloseHandle(hWritePipe);
    CloseHandle(hReadPipe);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return(bret);
}
时间: 2024-11-09 13:26:06

C++ 硬件信息 获取CPU序列号的相关文章

C++ 硬件信息 获取主板序列号

获取计算机网卡主板序列号的方法很多,这里采用的是命令行的形式获取,可以获取主板序列号,很简单,直接上代码. [1]头文件 #if !defined(AFX_DD71A3C0_A52F_4C38_B062_8E05785607DC__INCLUDED_) #define AFX_DD71A3C0_A52F_4C38_B062_8E05785607DC__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #in

C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

1 using System.Management; 2 3 namespace GLaLa 4 { 5 /// <summary> 6 /// hardware_mac 的摘要说明. 7 /// </summary> 8 class HardwareInfo 9 { 10 /// <summary> 11 /// 取机器名 12 /// </summary> 13 /// <returns></returns> 14 public

Centos7硬件信息查询cpu,mem,fdisk,网卡

所有机器硬件信息: dmesg |more CPU信息: cat /proc/cpuinfo 查看有几核 MEM内存: cat /proc/meminfo free -m top 磁盘信息: df -Th 查看磁盘上各目录大小 fdisk -h 查看磁盘分区及大小信息,包括U盘 cat /proc/partitions NET网卡信息: ethtool em1    指定 查看网卡信息 ifconfig cat /etc/sysconfig/network-scripts/ifcf-em1 主板

Window下获取硬件信息(CPU, 硬盘,网卡等)

一.头文件如下: #include <Windows.h> #include <string> #include <iostream> #include <winnt.h> #include <tchar.h> #include <IPHlpApi.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Advapi32.lib") #

linux查询硬件信息(CPU、内存、主板等)

1 查询CPU信息: 说明 # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 如果CPU核数和逻辑数相同,说明该CPU没有超线程,反之则有,如本例中的CPU就是双线程的 查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 查看CPU物理个数 cat /proc/cpuinfo |grep "physical id" | so

C++ 硬件信息 获取网卡MAC地址

获取计算机网卡MAC地址的方法很多,这里采用的是命令行的形式获取,可以获取有线网卡与无线网卡的MAC地址,很简单,直接 上代码. [1]头文件 #if !defined(AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_) #define AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER

VC++获取CPU序列号 CPU ID

CString strCPUID; unsigned long s1, s2; __asm{ mov eax, 01h xor edx, edx cpuid mov s1, edx mov s2, eax } strCPUID.Format(_T("%08X%08X"), s1, s2); SetDlgItemText(IDC_STATIC,strCPUID); 参考https://blog.csdn.net/WU9797/article/details/81209531 原文地址:h

Python 系统资源信息获取CPU 和内存使用情况

In [6]: psutil.swap_memory()Out[6]: sswap(total=23501340672, used=20144758784, free=3356581888, percent=85.7, sin=0, sout=0) In [7]: psutil.cpu_percent(interval=None, percpu=False)Out[7]: 32.8 原文地址:https://www.cnblogs.com/du-jun/p/11984608.html

Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)

 通过修改/etc/inittab.通过这个文件修改系统的启动方式. ls –l /etc/ | more   (管道),将前面的结果交给后面的命令进行处理. 在linux中遇到问题使用man命令. 查找文件信息并将文件存储到一个制定的文件中. ls –la > "a.txt" 创建组名: 创建组: 查看Linux中所有组的信息:cat /etc/group | more 其中root:x:0 root:表示组名,x:表示加密后的权限声明,0:表示root组的id号. 7创建