Как получить информацию о температуре процессора из биоса с помощью c #? - PullRequest
8 голосов
/ 01 сентября 2010

Как получить информацию о температуре процессора из Bios с помощью c # Я попробовал код в Мониторинг температуры процессора

Но не повезло.«enumerator.Current» выдал исключение.

Как мне этого добиться?Спасибо.

Ошибка:

"Эта система не поддерживает требуемые объекты WMI (1) - проверьте файл исключений \ r \ nНе поддерживается \ r \ n \ r \n в System.Management.ManagementException.ThrowWithExtendedInfo (ManagementStatus errorCode) \ r \ n в System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext () \ r \ n в CedarLogic.WmiLib.SystemStatistics.r\ TemperatureMonitorSln \ WmiLib \ SystemStatistics.cs: строка 25 \ r \ n в CedarLogic.WmiLib.SystemStatistics.get_CurrentTempera () в D: \ Downloads \ TempMonitorSrc \ TemperatureMonitorSln \ WmiLib \ SystemStatistics.cs: линия 87 \ r \ at.SystemTrayService.CheckSupport () в D: \ Downloads \ TempMonitorSrc \ TemperatureMonitorSln \ TemperatureMonitor \ SystemTrayService.cs: строка 260 "

Ответы [ 3 ]

2 голосов
/ 03 сентября 2010

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

1) Open Hardware Monitor - приложение с открытым исходным кодом .NET 2.0:

http://openhardwaremonitor.org/

2) Core Temp - бесплатное приложение и .NET API для получения данных о температуре:

http: // www.alcpu.com/CoreTemp/developers.html

1 голос
/ 03 апреля 2012

Я знаю, что эта ветка старая, но я хотел добавить к ней немного другой подход. Снимите марку / модель с чипа ввода / вывода на материнской плате и получите спецификацию для указанного чипа ввода / вывода (для справки я буду использовать микросхему ITE IT8783F). Посмотрите под чем-то вроде Environment Controller и рассчитайте порты доступа и чтения. Да ... вы должны понимать HEX, MSB и LSB, и я не буду вдаваться в расчеты / объяснения здесь (выходит за рамки). Теперь в этом случае порт доступа - 295, а порт чтения - 296. При чтении ниже в разделе приведена таблица для регистров контроллера среды. В этом случае температура процессора находится в регистре 2Ah (или 0x2A). Итак, код VB / C #, который я использовал для получения информации, выглядит следующим образом:

Private Function GetCPUTemp() As UInt32
    Dim tCpu As UInt32
    Dim stCpu As Short
    PortAccess.Outputb(&H295, &H2A)
    stCpu = PortAccess.Inputb(&H296)
    tCpu = CType(stCpu, UInt32)
    Return tCpu
End Function

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

0 голосов
/ 03 сентября 2010

Я бы рекомендовал следующий подход.Есть несколько бесплатных приложений, которые отслеживают температуру процессора и отображают его.Попробуйте загрузить некоторые из них, а затем проанализировать приложение, чтобы увидеть, какие методы они вызывают, чтобы узнать, как они работают.Возможно, у них совсем другой подход к вашему существующему.Также вы можете просто написать им письмо и спросить, как они это сделали ...

http://www.alcpu.com/CoreTemp/

http://www.techpowerup.com/realtemp/

http://malektips.com/core-temp-cpu-windows-system-tray-taskbar.html

...