如何获取硬盘和CPU序列号

uyuyfic 2012-12-17 08:38:34
如题,VC中如何获取计算机中所有硬盘和CPU的唯一序列号?想用这来生成机器码。
在网上查了很多这方面的源代码,但都是不行的?
求指教。
...全文
397 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pig_wallow 2012-12-17
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
这问题也经常出现吧。 1.WMI编程 2.老帖子你都试过了? 老帖
恩恩,老贴说了哈,,,,,, 还有实在不行就ntquerysysteminformation函数和deViceiocontrol函数试试。。。。。。
傻X 2012-12-17
  • 打赏
  • 举报
回复
这问题也经常出现吧。 1.WMI编程 2.老帖子你都试过了? 老帖
九州剑王 2012-12-17
  • 打赏
  • 举报
回复
函数可以获得的啊,其实只要你的文件系统可用,这些东西就都能正确的获得的,VC也有接口的
uyuyfic 2012-12-17
  • 打赏
  • 举报
回复
引用 4 楼 fanxiaosan 的回复:
这个是获取CPU的信息的,至于硬盘信息,我自己也没搞好 #include <windows.h> #include <objbase.h> #include <atlbase.h> #include <iostream> #include <comutil.h> #include <comdef.h> #include <Wbemidl.h> #prag……
好不容易啊
fanxiaosan 2012-12-17
  • 打赏
  • 举报
回复
这个是获取CPU的信息的,至于硬盘信息,我自己也没搞好 #include <windows.h> #include <objbase.h> #include <atlbase.h> #include <iostream> #include <comutil.h> #include <comdef.h> #include <Wbemidl.h> #pragma comment(lib, "wbemuuid.lib") using namespace std; 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<IWbemClassObject**>( &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<<"CPU信息:"<<std::endl; std::cout << "\t产品型号: " << (_bstr_t)var_cpu_name << std::endl; std::cout << "\tCPU主频: " << (_bstr_t)var_max_clockspeed << "MHZ"<<std::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"<<std::endl; std::cout << "\t二级缓存速度: " << (_bstr_t)var_L2cache_speed << "MHZ"<<std::endl; std::cout << "\t外频: " << (_bstr_t)var_L2cache_speed << "MHZ"<<std::endl; std::cout << "\t寻址宽度: " << (_bstr_t)var_address_width << "位"<<std::endl; std::cout << "\t数据宽度: " << (_bstr_t)var_data_width << "位"<<std::endl; std::cout << "\t当前电压: " << (_bstr_t)var_current_voltage << "V"<<std::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; }

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧