获取CPU温度

2024-01-06

我想知道CPU的温度。 以下是我使用 C++ 和 WMI 所做的工作。我正在读取 MSAcpi_ThermalZoneTemperature,但它始终相同,而且根本不是 CPU 温度。

有没有办法不用写驱动就能获取CPU的真实温度?或者有什么我可以使用的库吗?先感谢您。

#define _WIN32_DCOM
#include <iostream>
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("temp=%lf\n", ((double)temp / 10 - 273.15));
        getc(stdin);
        return 0;
}

说实话,这取决于硬件。

适用于大多数硬件的库是 OpenHardwareMonitorLib。不幸的是,它没有文档,实际上并不作为一个独立的软件存在。它是名为“Open Hardware Monitor”的开源软件的一部分。它是在 .NET C Sharp 中完成的,当然,仅适用于 Windows。幸运的是,您可以将其作为 DLL 获取,并且 GUI 与实际后端 OpenHardwareMonitorLib 完全分离。

阅读这篇文章,了解如何从 C++ 使用它

如何从 Native C++ 调用 C# 库(使用 C++\CLI 和 IJW) https://stackoverflow.com/questions/13293888/how-to-call-a-c-sharp-library-from-native-c-using-c-cli-and-ijw

因此,考虑到它没有文档,使用起来可能有点困难。阅读了一段时间的源码后,这是我的看法:

using OpenHardwareMonitor.Hardware;
...
float? cpu_temperature_celcius = null;
Computer computer = new Computer();
computer.CPUEnabled = true;
computer.Open();
foreach (IHardware hardware in computer.Hardware)
    if (hardware.HardwareType == HardwareType.CPU)
        foreach (ISensor sensor in hardware.Sensors)
            if (sensor.SensorType == SensorType.Temperature)
                cpu_temperature_celcius = sensor.Value;

此 C# 代码获取以 Celcius 为单位的 CPU 温度。在 Intel Haswell CPU 上进行测试。它很可能适用于 AMD 和 Intel 的大多数其他 CPU。需要 OpenHardwareMonitorLib.dll。你可以从编译它source https://github.com/openhardwaremonitor/openhardwaremonitor

您可以通过该库获得有关系统的许多其他信息。

请注意,用户的CPU 可以有多个温度传感器。例如,每个核心都有一个温度传感器,因此不要像我在上面的示例中那样总是采用最后一个。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取CPU温度 的相关文章

  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 如果对象无论如何都会被销毁,为什么我们在 dealloc 时将 delegate 设置为 nil 呢?

    void scrollViewDidScroll UIScrollView scrollView PO NSStringFromCGPoint self tableView contentOffset PO NSStringFromUIEd
  • PHP - 如何提交没有按钮的选择菜单

    当选择更改时 是否可以自动提交选择菜单 而无需使用按钮提交表单 我的页面上有四个这样的按钮 每个按钮都占用了太多空间 通过选择菜单 我的意思是
  • #包含父目录的文件

    我的文件夹结构是 libA x h y h algorithm a h Now in a h I have include libA x h 这是行不通的 它正在寻找algorithm libA x h 所以我应该使用 include x
  • Emacs 按文件定制

    我有一个带有自定义宏的 Emacs Lisp 文件 我想要以不同的方式字体和缩进 代码如下 defmacro when let var value rest body let var value when var body defun fu
  • FIDO U2F 令牌 Web 浏览器兼容性

    我正在尝试整合U2FGWT 项目中的身份验证 我需要知道该解决方案是否兼容all新的网络浏览器 Firefox Internet Explorer Safari 通常在 Google Chrome 中我必须安装一个名为 FIDO U2F 通
  • 如何找出分支中哪些文件已被修改?

    我有两个分支 master 和 bug1 我检查了 bug1 做了很多更改和多次提交 如何获取分支上更改的所有文件的列表 我对哈希值 日期或任何其他提交相关的细节不感兴趣 我只想获得一个简单的触摸文件列表 git diff name onl
  • sizeof(MPI_INT) 与 sizeof(int) 不同

    我注意到 int 和 double 的大小与使用函数 MPI Type size MPI INT MPI INT SIZE 计算的大小不同 这是否意味着 sizeof MPI INT 返回错误值 8 通常应该是 4 感谢您的回复 MPI I
  • org.slf4j.helpers.NOPLoggerFactory 无法转换为 ch.qos.logback.classic.LoggerContext

    当我在maven m2e 中使用logback时 出现以下错误 环境 JBOSS 7 1 1 maven eclipse 但如果我只是作为主类单独运行 它就可以正常工作 我无法弄清楚为什么会出现此错误 任何人都可以帮助我解决此问题并找到解决
  • Composer 更新 => 致命错误:内存不足

    我在本地计算机上使用 XAMPP 我无法通过删除 PHP 内存限制来解决这个问题 我已经尝试过的 修改我的 php ini 以删除内存限制 gt 内存限制 1 检查我正在运行 PHP 5 6 并自行更新composer到最新版本 但似乎根本
  • 如何将源文件添加到另一个文件夹中

    我正在使用 cmake 在 C 中构建我的项目 假设我的源文件夹中有以下目录 Source Dir1 Class cpp Class hpp Dir2 Main cpp 在 Dir1 中有一个类及其头文件和实现文件 Class cpp 和
  • ContentEditable 上可靠的跨浏览器信息

    我正在寻找完全支持使用 ContentEditable 的 Web 浏览器列表 我知道IE从5或5 5开始就支持它 但是其他浏览器呢 我知道 Chrome Flock Maxthon Opera 和 I E 的现代版本都支持它 但我不关心现
  • 加载 DB2 JDBC 驱动程序时出现 java.lang.UnsatisfiedLinkError

    我尝试将jboss seam与db2数据库一起使用 出现以下错误 com ibm db2 jcc a SqlException jcc 10389 12245 3 52 95 while loading the native library
  • 在Python中,是否有async相当于multiprocessing或concurrent.futures?

    基本上 我正在寻找使用 python3 协程作为后端而不是线程或进程提供并行映射的东西 我相信执行高度并行 IO 工作时应该有更少的开销 当然类似的东西已经存在了 无论是在标准库中还是在一些广泛使用的包中 免责声明 PEP 0492 htt
  • 使用 Typescript 设置 Vue 数据对象中的数据类型

    我目前正在 webpack 项目中使用 Vue js 和 Typescript 如中所示推荐配置 https v2 vuejs org v2 guide typescript html in my tsconfig json I have
  • 将字符串转换为 LatLng

    我正在使用 Google Maps API v2 并且从 SharedPreferences 中获取位置坐标单个字符串 34 8799074 174 7565664 我需要将其转换为 LatLng 有人可以帮忙吗 Thx 谷歌地图Andro
  • Caliburn.Micro 将 MainView 中的 UserControls 绑定到其 ViewModel

    我有一个 MainView xaml 绑定到 MainViewModel 就可以了 我想尝试的是将主窗体上的许多控件拆分为用户控件 现在 我将 UserControls 与 MainView 一起放入 Views 文件夹中 并将它们命名为
  • 我在 KubernetesPodOperator 的 DAG 设置中做错了什么

    我在这个中找到了以下Airflow DAG博客文章 https kubernetes io blog 2018 06 28 airflow on kubernetes part 1 a different kind of operator
  • Spritekit - 创建一堵“墙”

    我想知道如何用 spritekit 创建一堵墙 物体上的某些东西无法移动过去 我知道我可以使用这段代码 self physicsBody SKPhysicsBody bodyWithEdgeLoopFromRect self frame 但
  • JavaScript 对象检测:点语法与“in”关键字

    我见过两种检测 UA 是否实现特定 JS 属性的方法 if object property and if property in object 我想听听关于哪个更好的意见 最重要的是 为什么 其中一个明显优于另一个吗 除了这两种方法之外还有
  • 获取CPU温度

    我想知道CPU的温度 以下是我使用 C 和 WMI 所做的工作 我正在读取 MSAcpi ThermalZoneTemperature 但它始终相同 而且根本不是 CPU 温度 有没有办法不用写驱动就能获取CPU的真实温度 或者有什么我可以