在Windows下,如何编程获取CPU的当前温度?

在Windows下,如何编程获取CPU的当前温度? 用C/C++,或C#实现
关注者
88
被浏览
203,566

8 个回答

不得不指出,其他答案说的WMI方法是错误的,包括外网上面找的回答。WMI可以取得ACPI定义中的Thermal Zone中的_TMP的温度内容,这个值是BIOS报告的。但这里有两个问题:

  1. WMI需要BIOS支持,而很多BIOS并不支持。
  2. Thermal Zone的 _TMP报告的一般是主板的某个温区,而不是CPU的温度

CPU的温度应该直接访问寄存器得到。但软件都在ring 3上,要读取寄存器的内容,需要通过ring 0的驱动程序,这个很简单,像鲁大师等软件为了访问底层信息都有驱动程序配套。难点是这些信息有些是MSR,有些在PCI配置空间中,需要根据CPU型号进行判断。

其他电脑的温度读取方法我在下面这个回答中加了:

欢迎大家关注我的专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。

用微信扫描二维码加入UEFIBlog公众号

来自 stackoverflow.com

static void Main(string[] args)
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\WMI",
                                 "SELECT * FROM MSAcpi_ThermalZoneTemperature");
            ManagementObjectCollection.ManagementObjectEnumerator enumerator =
                searcher.Get().GetEnumerator();
            int raw = 0;
            while (enumerator.MoveNext())
                ManagementBaseObject tempObject = enumerator.Current;