Ps:干了一晚上的体力活~不是ctrl + c 就是ctrl +v...表示很囧. mark一下..
我也贴一段获取CPU信息的代码.
先上图片:(当前电压还得除以个10)
关于使用WMI获取CPU信息,可能会将Intel Core系列的处理器识别成Xeon系列的.
貌似是系统少打了一个补丁,具体补丁是啥,不记得了..(walk哥看到了,就提醒下吧.)
一种纠正上面这个错误的办法,就是通过读取注册表键值
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0\ProcessorNameString
另外就是通过CPUID来识别了.(这个研究下吧~)
下面这段代码,让人蛋疼的就是WSQL语句了,大家可以搜索下"彗星WMI调试工具"
using namespace std;
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "wbemuuid.lib")
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
if ( FAILED( hr ) )
{
std::cerr << "COM initialization
failed" << std::endl;
return -1;
}
// setup process-wide security context
hr = CoInitializeSecurity( NULL, // we're not a server
-1, // we're not a server
NULL, // dito
NULL, // reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // let DCOM decide
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL );
if ( FAILED( hr ) )
{
std::cerr << "Security
initialization failed" <<
std::endl;
return -1;
}
int result = 0;
// we're going to use CComPtr<>s,
whose lifetime must end BEFORE CoUnitialize is called
{
// connect to WMI
CComPtr< IWbemLocator >
locator;
hr = CoCreateInstance( CLSID_WbemAdministrativeLocator,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, reinterpret_cast< void**
>( &locator ) );
if ( FAILED( hr ) )
{
std::cerr << "Instantiation of
IWbemLocator failed" <<
std::endl;
return -1;
}
// connect to local service with current credentials
CComPtr< IWbemServices >
service;
hr = locator->ConnectServer( L"root\\cimv2",
NULL, NULL, NULL,
WBEM_FLAG_CONNECT_USE_MAX_WAIT,
NULL, NULL, &service );
if ( SUCCEEDED( hr ) )
{
// execute a query
CComPtr< IEnumWbemClassObject >
enumerator;
hr = service->ExecQuery( L"WQL", L"Select * From
Win32_Processor",
WBEM_FLAG_FORWARD_ONLY, NULL, &enumerator );
if ( SUCCEEDED( hr ) )
{
// read the first instance from the enumeration (only one on
single processor machines)
CComPtr< IWbemClassObject >
processor = NULL;
ULONG retcnt;
hr = enumerator->Next( WBEM_INFINITE, 1L,
reinterpret_cast( &processor ),
&retcnt );
if ( SUCCEEDED( hr ) )
{
if ( retcnt > 0 )
{
// we have a processor installed :)
// now extract a property value
_variant_t var_cpu_name;
_variant_t var_max_clockspeed;
_variant_t var_current_clockspeed;
_variant_t var_logical_cores;
_variant_t var_physical_cores;
_variant_t var_L2cache_size;
_variant_t var_L2cache_speed;
_variant_t var_ext_clockspeed;
_variant_t var_address_width;
_variant_t var_data_width;
_variant_t var_current_voltage;
_variant_t var_cpu_description;
_variant_t var_manu_facturer; // 制造商
_variant_t var_power_support;
_variant_t var_processor_id;
_variant_t var_status;
hr = processor->Get( L"Name", 0,
&var_cpu_name, NULL, NULL );
processor->Get(L"MaxClockSpeed",0,&var_max_clockspeed,NULL,NULL);
processor->Get(L"CurrentClockSpeed",0,&var_current_clockspeed,NULL,NULL);
processor->Get(L"NumberOfLogicalProcessors",0,&var_logical_cores,NULL,NULL);
processor->Get(L"NumberOfCores",0,&var_physical_cores,NULL,NULL);
processor->Get(L"L2CacheSize",0,&var_L2cache_size,NULL,NULL);
processor->Get(L"L2CacheSpeed",0,&var_L2cache_speed,NULL,NULL);
processor->Get(L"ExtClock",0,&var_ext_clockspeed,NULL,NULL);
processor->Get(L"AddressWidth",0,&var_address_width,NULL,NULL);
processor->Get(L"DataWidth",0,&var_data_width,NULL,NULL);
processor->Get(L"CurrentVoltage",0,&var_current_voltage,NULL,NULL);
processor->Get(L"Description",0,&var_cpu_description,NULL,NULL);
processor->Get(L"Manufacturer",0,&var_manu_facturer,NULL,NULL);
processor->Get(L"PowerManagementSupported",0,&var_power_support,NULL,NULL);
processor->Get(L"ProcessorId",0,&var_processor_id,NULL,NULL);
processor->Get(L"Status",0,&var_status,NULL,NULL);
if ( SUCCEEDED( hr ) )
{
//_bstr_t str_cpu_name = var_cpu_name;
//_bstr_t str_max_clockspeed = var_max_clockspeed;
std::cout<
std::cout << "\t产品型号: "
<< (_bstr_t)var_cpu_name
<< std::endl;
std::cout << "\tCPU主频: "
<< (_bstr_t)var_max_clockspeed
<<
"MHZ"<<:endl>
std::cout << "\t当前工作主频: "
<< (_bstr_t)var_current_clockspeed
<<
"MHZ"<< std::endl;
std::cout << "\t物理核心数: "
<< (_bstr_t)var_physical_cores
<< std::endl;
std::cout << "\t逻辑核心数: "
<< (_bstr_t)var_logical_cores
<< std::endl;
std::cout << "\t二级缓存容量: "
<< (_bstr_t)var_L2cache_size
<<
"KB"<<:endl>
std::cout << "\t二级缓存速度: "
<< (_bstr_t)var_L2cache_speed
<<
"MHZ"<<:endl>
std::cout << "\t外频: "
<< (_bstr_t)var_L2cache_speed
<<
"MHZ"<<:endl>
std::cout << "\t寻址宽度: "
<< (_bstr_t)var_address_width
<<
"位"<<:endl>
std::cout << "\t数据宽度: "
<< (_bstr_t)var_data_width
<<
"位"<<:endl>
std::cout << "\t当前电压: "
<< (_bstr_t)var_current_voltage
<<
"V"<<:endl>
std::cout << "\t所属系列: "
<< (_bstr_t)var_cpu_description
<< std::endl;
std::cout << "\t制造商: "
<< (_bstr_t)var_manu_facturer
<< std::endl;
std::cout << "\tCPU序列号: "
<< (_bstr_t)var_processor_id
<< std::endl;
//std::cout << "\t是否支持电源管理: "
<< (_bstr_t)var_power_support
<< std::endl;
std::cout << "\t当前状态: "
<< (_bstr_t)var_status
<< std::endl;
}
else
{
std::cerr <<
"IWbemClassObject::Get failed" <<
std::endl;
result = -1;
}
}
else
{
std::cout << "Enumeration empty"
<< std::endl;
}
}
else
{
std::cerr << "Error in iterating
through enumeration" <<
std::cerr;
result = -1;
}
}
else
{
std::cerr << "Query failed"
<< std::endl;
result = -1;
}
}
else
{
std::cerr << "Couldn't connect to
service" << std::endl;
result = -1;
}
}
CoUninitialize();
return result;
}