Как узнать температуру процессоров с помощью C # в WinForms

Хотя не каждая материнская плата имеет монитор температуры, вы можете получить эту информацию, если она доступна с материнской платы через класс WMI Windows, запрашивая конкретно MSAcpi_ThermalZoneTemperature учебный класс. Win32_TemperatureProbe Класс WMI представляет свойства датчика температуры (электронный термометр). Большая часть информации о том, что Win32_TemperatureProbe WMI класс обеспечивает от SMBIOS. Показания в реальном времени для свойства CurrentReading не могут быть извлечены из таблиц SMBIOS.

В этой статье мы поделимся с вами довольно простым способом получения текущей температуры вашего процессора с помощью C # через класс WMI Windows.

1. Добавьте ссылку на класс System.Management

Чтобы получить информацию о материнской плате с C # в WinForms, вам потребуется доступ к классу System Management:

using System.Management;

Однако в некоторых версиях Visual Studio (особенно в версии 2010 и более поздних) вам необходимо добавить ссылку (.DLL) в вашем проекте вручную. Для этого выполните следующие действия:

  1. Щелкните правой кнопкой мыши на Project, Добавить ссылки

  2. Выберите Сборки (рамки) Вкладка и поиск System.Management и, наконец, добавьте ссылку и нажмите ОК.

Добавьте System.Management справочную визуальную студию вручную

Нам нужно добавить System.Management создавать запросы в WMI Classes, Узнайте больше о получении классов WMI в .NET в msdn здесь.

С другой стороны, помните что все реализации который использует ManagementObjectSearcher класс для получения системной информации, значения свойств которой являются целочисленными значениями (0-100), и эти значения не связаны с именем свойства (т. е. с Video_Controller Класс GPU в Архитектура свойство, которое возвращает значение от 0 до 9), и вы ожидаете очень специфическое значение (например, х86 или х64), тогда, вероятно, вы проходите мимо какой-то информации! Пожалуйста, прочитайте документацию класса на веб-сайте Microsoft для разработчиков (предоставлено в каждой части статьи соответственно), чтобы получить подробное описание каждого свойства.

2. Получение температуры процессора и имени экземпляра

Теперь, когда у вас есть доступ к классу System Management, вы сможете сделать запрос к указанному классу, чтобы получить температуру процессора с помощью следующего кода:

Заметка

Вы можете столкнуться с проблемами при получении привилегированного доступа из ядра, поэтому обязательно запустите ваше приложение или 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);
Ссылка на основную публикацию
Adblock
detector