个性化阅读
专注于IT技术分析

如何在WinForms中使用C#检索CPU的温度

本文概述

尽管不是每个主板都配置一个温度监控器, 但你可以通过Windows的WMI类从主板上获取此信息(如果有的话), 具体查询MSAcpi_ThermalZoneTemperature类。 Win32_TemperatureProbe WMI类代表温度传感器(电子温度计)的属性。 Win32_TemperatureProbe WMI类提供的大多数信息来自SMBIOS。无法从SMBIOS表中提取CurrentReading属性的实时读数。

在本文中, 我们将与你分享一种非常简单的方法, 该方法通过Windows的WMI类使用C#检索CPU的当前温度。

1.添加对System.Management类的引用

为了获得有关WinForms中带有C#的主板的信息, 你将需要访问System Management类:

using System.Management;

但是, 在某些Visual Studio版本中(特别是在2010年和更高版本中), 你需要在项目中手动添加引用(.DLL)。为此, 请按照下列步骤操作:

  1. 右键单击项目, 添加引用

  2. 选择”程序集(框架)”选项卡, 然后搜索System.Management, 最后添加引用, 然后单击”确定”。

手动添加System.Management参考Visual Studio

我们需要添加System.Management来在WMI类中创建查询。在此处阅读有关在msdn中检索.NET中的WMI类的更多信息。

另一方面, 请记住, 所有使用ManagementObjectSearcher类来获取系统信息的实现, 其属性值为整数值(0-100), 并且这些值与属性名称无关(例如, 使用Video_Controller GPU类)返回0到9之间的值的Architecture属性), 并且你期望一个非常特定的值(例如x86或x64), 则可能是你传递了一些信息!请阅读Microsoft开发人员网络网站上的类的文档(分别在文章的每个部分中提供), 以获取每个属性的详细说明。

2.检索CPU温度和实例名称

现在, 你可以访问”系统管理”类, 你将可以使用以下代码查询所提到的类以获得CPU的温度:

注意

你可能会遇到从内核获得特权访问的问题, 因此请确保以管理员身份运行你的应用程序或Visual Studio(如果正在尝试)。

// Important: don't forget to include the System Management class in your code
using System.Management;

// Create tmp variables to store values during the query
Double temperature = 0;
String instanceName = "";


// Query the MSAcpi_ThermalZoneTemperature API
// Note: run your app or Visual Studio (while programming) or you will get "Access Denied"
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");

foreach (ManagementObject obj in searcher.Get())
{
    temperature = Convert.ToDouble(obj["CurrentTemperature"].ToString());
    // Convert the value to celsius degrees
    temperature = (temperature - 2732) / 10.0;
    instanceName = obj["InstanceName"].ToString();
}

// Print the values e.g:

// 29.8
Console.WriteLine(temperature);

// ACPI\ThermalZone\TZ01_0
Console.WriteLine(instanceName);

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在WinForms中使用C#检索CPU的温度

评论 抢沙发

评论前必须登录!