使用QT作为开发工具不使用WMI获取CPU温度、CPU使用率、CPU风扇转速、CPU功耗在windows平台下代码库并没有OpenHardwareMonitorLibh
在Windows平台下,如果你想获取CPU温度、使用率、风扇转速和功耗,可以使用第三方库如OpenHardwareMonitor来实现。但是,你提到的OpenHardwareMonitorLib.h文件在代码库中并不存在,可能是你没有找到正确的库文件。
以下是使用OpenHardwareMonitor库获取CPU信息的示例代码:
#include <iostream>
#include <Windows.h>
#include <comdef.h>
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
int main()
{
HRESULT hres;
// 初始化COM
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
std::cout << "Failed to initialize COM library. Error code: " << hres << std::endl;
return 1;
}
// 创建WMI服务
IWbemLocator* pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
if (FAILED(hres))
{
std::cout << "Failed to create IWbemLocator object. Error code: " << hres << std::endl;
CoUninitialize();
return 1;
}
IWbemServices* pSvc = NULL;
hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\OpenHardwareMonitor"), NULL, NULL, 0, NULL, 0, 0, &pSvc);
if (FAILED(hres))
{
std::cout << "Failed to connect to WMI namespace. Error code: " << hres << std::endl;
pLoc->Release();
CoUninitialize();
return 1;
}
// 设置安全级别
hres = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
if (FAILED(hres))
{
std::cout << "Failed to set security level. Error code: " << hres << std::endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// 查询CPU信息
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(_bstr_t("WQL"), _bstr_t("SELECT * FROM Sensor WHERE SensorType='Temperature' OR SensorType='Load' OR SensorType='Fan' OR SensorType='Power'"), WBEM_FLAG_FORWARD_ONLY, NULL, &pEnumerator);
if (FAILED(hres))
{
std::cout << "Failed to execute WQL query. Error code: " << hres << std::endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// 遍历查询结果
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (uReturn == 0)
{
break;
}
VARIANT vtProp;
hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
if (SUCCEEDED(hres))
{
std::wstring name(vtProp.bstrVal, SysStringLen(vtProp.bstrVal));
VariantClear(&vtProp);
hres = pclsObj->Get(L"Value", 0, &vtProp, 0, 0);
if (SUCCEEDED(hres))
{
if (name.find(L"Temperature") != std::wstring::npos)
{
std::cout << "CPU Temperature: " << vtProp.fltVal << " °C" << std::endl;
}
else if (name.find(L"Load") != std::wstring::npos)
{
std::cout << "CPU Load: " << vtProp.fltVal << " %" << std::endl;
}
else if (name.find(L"Fan") != std::wstring::npos)
{
std::cout << "CPU Fan Speed: " << vtProp.fltVal << " RPM" << std::endl;
}
else if (name.find(L"Power") != std::wstring::npos)
{
std::cout << "CPU Power: " << vtProp.fltVal << " W" << std::endl;
}
VariantClear(&vtProp);
}
}
pclsObj->Release();
}
// 释放COM对象
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 0;
}
请注意,上述代码使用了WMI(Windows Management Instrumentation)来获取CPU信息。如果你不想使用WMI,可能需要使用其他库或API来实现。
原文地址: https://www.cveoy.top/t/topic/hFkz 著作权归作者所有。请勿转载和采集!