天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 80|回复: 0

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

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
【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);  
    }

 

 

 

 

C++ 硬件信息 获取CPU序列号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:25 , Processed in 0.133395 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表