Как получить температуру ЦП?

Самый корректный ответ, о котором я могу думать, Int32.MaxValue.

55
задан yeyeyerman 28 July 2009 в 05:03
поделиться

3 ответа

Я почти уверен, что это зависит от производителя, поскольку доступ к ним будет осуществляться через порт ввода-вывода. Если у вас есть конкретная плата, с которой вы пытаетесь работать, попробуйте просмотреть руководства и / или связаться с производителем.

Если вы хотите сделать это для большого количества разных плат, я бы порекомендовал связаться с кем-нибудь в чем-нибудь например SiSoftware, или будьте готовы прочитать МНОГО руководств по материнским платам.

Еще одно примечание: не все платы имеют мониторы температуры.

Вы также можете столкнуться с проблемами при получении привилегированного доступа из ядра.

19
ответ дан 7 November 2019 в 07:14
поделиться

Есть сообщение в блоге с некоторым примером кода C # о том, как это сделать здесь .

2
ответ дан 7 November 2019 в 07:14
поделиться

Я знаю, что это старое сообщение, но просто хотел добавить комментарий, если кто-то должен просмотреть этот пост и попытаться найти решение этой проблемы.

Вы действительно можете очень легко узнать температуру процессора в C #, используя подход WMI.

Чтобы получить значение Цельсия, я создал оболочку, которая преобразует значение, возвращаемое WMI, и превращает его в простой в использовании объект.

Не забудьте добавить ссылку на System.Management.dll в Visual Studio.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace RCoding.Common.Diagnostics.SystemInfo
{
    public class Temperature
    {
        public double CurrentValue { get; set; }
        public string InstanceName { get; set; }
        public static List<Temperature> Temperatures
        {
            get
            {
                List<Temperature> result = new List<Temperature>();
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
                foreach (ManagementObject obj in searcher.Get())
                {
                    Double temp = Convert.ToDouble(obj["CurrentTemperature"].ToString());
                    temp = (temp - 2732) / 10.0;
                    result.Add(new Temperature { CurrentValue = temp, InstanceName = obj["InstanceName"].ToString() });
                }
                return result;

            }
        }
    }
}

Обновление 25.06.2010:

(Только что видел, что была размещена ссылка на такое же решение выше ... В любом случае, я оставлю этот фрагмент кода, если кто-то захочет его использовать :-))

31
ответ дан 7 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: