在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来实现。

使用QT作为开发工具不使用WMI获取CPU温度、CPU使用率、CPU风扇转速、CPU功耗在windows平台下代码库并没有OpenHardwareMonitorLibh

原文地址: https://www.cveoy.top/t/topic/hFkz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录