java wmi获取硬件信息_WMI获取硬件信息

Ps:干了一晚上的体力活~不是ctrl + c 就是ctrl +v...表示很囧. mark一下..

我也贴一段获取CPU信息的代码.

先上图片:(当前电压还得除以个10)

a4c26d1e5885305701be709a3d33442f.png

关于使用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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值