21xrx.com
2024-12-22 17:24:51 Sunday
登录
文章检索 我的文章 写文章
C++获取硬件信息
2023-06-26 16:13:57 深夜i     --     --
C++ 硬件 信息 获取

C++作为一种广泛应用于系统编程的高级程序设计语言,可以获取许多硬件信息。这些信息包括CPU信息、操作系统信息、内存信息、硬盘信息等等。

在C++中,获取硬件信息可以通过两种方式:一种是使用第三方库,另一种是采用系统API。其中第三方库包括WMI(Windows Management Instrumentation)和Qt等。

下面以WMI为例,介绍如何获取硬件信息。

首先,需要在Windows系统中安装WMI服务,并升级到最新版本。然后,在C++代码中使用WMI API来实现获取硬件信息的功能。下面通过获取CPU信息为例,介绍具体实现。

首先,需要定义WMI对象指针和查询语句。代码如下:


IWbemLocator *locator = nullptr;

IWbemServices *services = nullptr;

IWbemClassObject *classObj = nullptr;

IEnumWbemClassObject *enumerator = nullptr;

BSTR bstrNamespace = SysAllocString(L"root\\CIMV2");

BSTR bstrQueryLanguage = SysAllocString(L"WQL");

BSTR bstrQuery = SysAllocString(L"SELECT * FROM Win32_Processor");

BSTR bstrUser = SysAllocString(L"");

BSTR bstrPassword = SysAllocString(L"");

其中,locator对象指针表示WMI服务的定位器,services对象指针表示WMI服务的实例,classObj对象指针表示返回的查询结果对象,enumerator对象指针表示枚举类对象。

接下来,需要连接WMI服务并执行查询,获取CPU信息。代码如下:


//连接WMI服务

HRESULT hr = CoInitialize(NULL);

if (FAILED(hr))

  return false;

hr = CoCreateInstance(CLSID_WbemLocator, nullptr, CLSCTX_INPROC_SERVER,

  IID_IWbemLocator, reinterpret_cast<void**>(&locator));

if (FAILED(hr)) {

  CoUninitialize();

  return false;

}

hr = locator->ConnectServer(bstrNamespace, bstrUser, bstrPassword, nullptr, 0, nullptr, nullptr, &services);

if (FAILED(hr)) {

  locator->Release();

  CoUninitialize();

  return false;

}

//执行查询操作

hr = services->ExecQuery(bstrQueryLanguage, bstrQuery, WBEM_FLAG_FORWARD_ONLY, nullptr, &enumerator);

if (FAILED(hr)) {

  services->Release();

  locator->Release();

  CoUninitialize();

  return false;

}

//获取CPU信息

ULONG uReturned = 0;

VARIANT varName;

BSTR bstrName = SysAllocString(L"Name");

while (enumerator) {

  enumerator->Next(WBEM_INFINITE, 1, &classObj, &uReturned);

  if (0 == uReturned)

    break;

  

  hr = classObj->Get(bstrName, 0, &varName, nullptr, nullptr);

  if (SUCCEEDED(hr)) {

    wprintf(L"CPU: %ws\n", varName.bstrVal);

  }

  VariantClear(&varName);

  classObj->Release();

  classObj = nullptr;

}

//释放资源

enumerator->Release();

services->Release();

locator->Release();

CoUninitialize();

在以上代码中,我们先连接WMI服务,并执行了CPU信息查询语句。然后,使用while循环获取查询结果序列,最后释放资源即可。

以上就是利用C++获取硬件信息的方法。通过编写简洁的C++代码,我们可以方便地获取各种硬件信息,可以为系统编程提供便捷的支持。除了获取CPU信息之外,我们也可以使用类似的方法获取其他硬件信息,例如硬盘信息、内存信息等等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复