gpt4 book ai didi

c++ - WMI CPUTemp 始终返回相同的值

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:03 25 4
gpt4 key购买 nike

我正在尝试从 WMI 获取 CPU 的温度。但是当我从管理员命令提示符执行代码时。它总是返回相同的值;

CPU = 39.050000 C”。

我不知道我哪里弄错了。我的操作系统是 Windows 10 64 位,我使用 Visual Studio 2017 15.1。我在 C# 上编写了相同的代码,它也返回相同的值,只有 39。我做了一些研究,但我仍然不确定如何处理这个问题。

  #define _WIN32_DCOM
#include <iostream>
#include "stdafx.h"
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>

#pragma comment(lib, "wbemuuid.lib")

HRESULT GetCpuTemperature(LPLONG pTemperature)
{
if (pTemperature == NULL)
return E_INVALIDARG;

*pTemperature = -1;
HRESULT ci = CoInitialize(NULL);
HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
if (SUCCEEDED(hr))
{
IWbemLocator *pLocator;
hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator);
if (SUCCEEDED(hr))
{
IWbemServices *pServices;
BSTR ns = SysAllocString(L"root\\WMI");
hr = pLocator->ConnectServer(ns, NULL, NULL, NULL, 0, NULL, NULL, &pServices);
pLocator->Release();
SysFreeString(ns);
if (SUCCEEDED(hr))
{
BSTR query = SysAllocString(L"SELECT * FROM MSAcpi_ThermalZoneTemperature");
BSTR wql = SysAllocString(L"WQL");
IEnumWbemClassObject *pEnum;
hr = pServices->ExecQuery(wql, query, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
SysFreeString(wql);
SysFreeString(query);
pServices->Release();
if (SUCCEEDED(hr))
{
IWbemClassObject *pObject;
ULONG returned;
hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &returned);
pEnum->Release();
if (SUCCEEDED(hr))
{
BSTR temp = SysAllocString(L"CurrentTemperature");
VARIANT v;
VariantInit(&v);
hr = pObject->Get(temp, 0, &v, NULL, NULL);
pObject->Release();
SysFreeString(temp);
if (SUCCEEDED(hr))
{
*pTemperature = V_I4(&v);
}
VariantClear(&v);
}
}
}
if (ci == S_OK)
{
CoUninitialize();
}
}
}
return hr;
}

这是我的主要代码

int main(int argc, char **argv)
{
LONG temp;
GetCpuTemperature(&temp);
printf("CPU = %lf °C\n", ((double)temp / 10 - 273.15));
getc(stdin);
return 0;
}

编辑:错误信息。

最佳答案

在我看来,这与 VARIANT 无关,因为 Windows 中的命令行:

"wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature"

此命令需要管理员角色,然后您将始终看到相同的值。

关于c++ - WMI CPUTemp 始终返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com