永发信息网

用C++语言怎么获取CPU的序列号

答案:2  悬赏:0  手机版
解决时间 2021-02-26 11:50
用C++语言怎么获取CPU的序列号
最佳答案
__cpuid 函数可解决。
全部回答

#include "stdafx.h" #include ".\puiddisk.h" #define _win32_dcom #include <iostream> using namespace std; #include <comdef.h> #include <wbemidl.h>

# pragma comment(lib, "wbemuuid.lib") cpuiddisk::cpuiddisk(void) {     getinfomation(); }

cpuiddisk::~cpuiddisk(void) { } int cpuiddisk::getinfomation(void) {     hresult hres;     //步骤1:不是必须的,com只须也只能初始化一次     hres =  coinitializeex(0, coinit_multithreaded );     if (failed(hres))     {     return 1; //初始化com异常:注意,com只须也只能初始化一次     }     //步骤2:不是必须的,com只须也只能设置一次     //set general com security levels     hres =  coinitializesecurity(     null,     -1,    // com authentication     null,    // authentication services     null,    // reserved     rpc_c_authn_level_default,   // default authentication     rpc_c_imp_level_impersonate, // default impersonation      null,    // authentication info     eoac_none,    // additional capabilities     null    // reserved     );          if (failed(hres))     {     couninitialize();     return 1;    // program has failed.     }         //以上不是必须的,若已有“::cominit();”,则要跳过     //步骤3: obtain the initial locator to wmi     iwbemlocator *ploc = null;     hres = cocreateinstance(     clsid_wbemlocator,         0,     clsctx_inproc_server,     iid_iwbemlocator, (lpvoid *) &ploc);       if (failed(hres))     {     couninitialize();     return 1;//failed to create iwbemlocator object     }

    //步骤4:connect to wmi through the iwbemlocator::connectserver method     iwbemservices *psvc = null;     hres = ploc->connectserver(     _bstr_t(l"root\\cimv2"), // object path of wmi namespace     null,    // user name. null = current user     null,    // user password. null = current     0,    // locale. null indicates current     null,    // security flags.     0,    // authority (e.g. kerberos)     0,    // context object     &psvc    // pointer to iwbemservices proxy     );         if (failed(hres))     {     ploc->release();         couninitialize();     return 1;    // program has failed.     }     // 步骤5: set security levels on the proxy     hres = cosetproxyblanket(     psvc,    // indicates the proxy to set     rpc_c_authn_winnt,    // rpc_c_authn_xxx     rpc_c_authz_none,    // rpc_c_authz_xxx     null,    // server principal name     rpc_c_authn_level_call,    // rpc_c_authn_level_xxx     rpc_c_imp_level_impersonate, // rpc_c_imp_level_xxx     null,    // client identity     eoac_none    // proxy capabilities     );

    if (failed(hres))     {     psvc->release();     ploc->release();         couninitialize();     return 1;     }

    // 步骤6:use the iwbemservices pointer to make requests of wmi ----     ienumwbemclassobject* penumerator = null;     //计算cpuid     hres = psvc->execquery(     bstr_t("wql"),     bstr_t("select * from win32_processor"),//win32_operatingsystem     wbem_flag_forward_only | wbem_flag_return_immediately,     null,     &penumerator);         if (failed(hres))     {     psvc->release();     ploc->release();     couninitialize();     return 1;     }     // 步骤7:get the data from the query     iwbemclassobject *pclsobj;     ulong ureturn = 0;     while (penumerator)     {     hresult hr = penumerator->next(wbem_infinite, 1,     &pclsobj, &ureturn);

    if(0 == ureturn)     {     break;     }     variant vtprop;     variantinit(&vtprop);     hr = pclsobj->get(l"processorid", 0, &vtprop, 0, 0);     strprocessid=_com_util::convertbstrtostring(vtprop.bstrval);//strprocessid:类级变量     }

    //计算硬盘系列号     hres = psvc->execquery(     bstr_t("wql"),     bstr_t("select * from win32_diskdrive"),     wbem_flag_forward_only | wbem_flag_return_immediately,     null,     &penumerator);

    if (failed(hres))     {     psvc->release();     ploc->release();     couninitialize();     return 1;     }     while (penumerator)     {     hresult hr = penumerator->next(wbem_infinite, 1,     &pclsobj, &ureturn);

    if(0 == ureturn)     {     break;     }

    variant vtprop;     variantinit(&vtprop);     hr = pclsobj->get(l"pnpdeviceid", 0, &vtprop, 0, 0);     strdisk=_com_util::convertbstrtostring(vtprop.bstrval);     }

    psvc->release();     ploc->release();     penumerator->release();     pclsobj->release();     couninitialize();

    return 0;    

本文来自csdn博客,转载请标明出处: http://blog.csdn.net/honkerhero/archive/2007/01/04/1473589.aspx

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
华为手机上不了微信怎么办
中国银行上犹支行这个地址在什么地方,我要处
遥知兄弟登高处 遥是什么意思
that's-not-all-technique是什么意思
七龙珠里面维斯哪里厉害了?他除了可以穿越宇
康斯丹郡正门地址在什么地方,想过去办事
水泥混凝土路面的纵缝在构造上分为()。A.设拉
电脑监控里的报警输出有什么作用
复旦大学每年招多少人
建武轮胎经销部我想知道这个在什么地方
发一部17.5米平板车,纯泡货130个方到惠州需
宝来低配选装天窗多少钱
在北京缴纳公积金在临沂能够使用买房吗
旺家乐门业(洛阳平民医院西)地址有知道的么?
近几年来,反常天气纷现世界各地,凸显了严峻
推荐资讯
广氮社区残疾人协会怎么去啊,有知道地址的么
龙虎大师k线图上的对字是什么意思
云龙轩足疗会馆我想知道这个在什么地方
民国时期《申报》有如下记载:“梳一东洋头,
神笔练字学堂怎么去啊,有知道地址的么
南林五金交电我想知道这个在什么地方
硅胶最低可耐零下多少度
什么是工商资本?
昌吉农商银行宁边西路支行在什么地方啊,我要
想问一个很专业的问题:现在多数单位招应届大
绿外套里面配什么衣服好看
跑男停播原因
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?