2015-04-13 5 views
2

Я создаю персональную программу мониторинга производительности системы, и у меня возникают проблемы с выяснением того, как C# извлекает информацию о температуре процессора и графического процессора.C# CPU и GPU Temp

У меня уже есть программа, которая получает информацию о загрузке и частоте CPU (а также различные другие вещи) через PerformanceCounter, но мне не удалось найти переменные Instance, Object и Counter для температуры процессора.

Кроме того, у меня есть возможность получить температуру более чем на одном графическом процессоре, так как у меня есть два.

Что мне делать?

+5

Посмотрите OpenHardwareMonitor, написанный на C# и OpenSource. – leppie

+0

Вы пробовали какие-либо решения, предлагаемые в этом поиске, некоторые из них имеют фрагменты кода: https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q= get% 20cpu% 20temperature% 20c% 23 –

+1

Возможный дубликат [Как получить температуру процессора?] (http://stackoverflow.com/questions/1195112/how-to-get-cpu-temperature) – Console

ответ

0

Используйте класс MSAcpi_ThermalZoneTemperature в WMI.

+3

Это действительно требует кода образец и связанная с ним команда, поскольку WMI не является конструкцией C#. – Gusdor

+0

@Gusdor Но есть много C# WMI образцов онлайн, если вы ищете. Это определенно шаг в правильном направлении. – Rup

+0

Я осмотрюсь и посмотрю, что я могу получить. Мне не нужен сложный блок кода для этого, мне просто нужно получить временные параметры. После этого у меня все обработано. Надежда WMI может дать мне это решение. – DanG

2

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

Генератор кода WMI можно найти здесь: http://www.microsoft.com/en-us/download/details.aspx?id=8572

быстро попробовать создает что-то вроде этого:

public static void Main() 
    { 
     try 
     { 
      ManagementObjectSearcher searcher = 
       new ManagementObjectSearcher("root\\WMI", 
       "SELECT * FROM MSAcpi_ThermalZoneTemperature"); 

          foreach (ManagementObject queryObj in searcher.Get()) 
      { 
       Console.WriteLine("-----------------------------------"); 
       Console.WriteLine("MSAcpi_ThermalZoneTemperature instance"); 
       Console.WriteLine("-----------------------------------"); 
       Console.WriteLine("CurrentTemperature: {0}", queryObj["CurrentTemperature"]); 
      } 
     } 
     catch (ManagementException e) 
     { 
      MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); 
     } 
    } 

Это не может быть именно то, что вам нужно просто попробовать вокруг со свойствами и доступных классов

0

Вы можете получить температуру процессора как в режиме WMI, так и в Openhardwaremonitor.

Open Hardwaremonitor:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using OpenHardwareMonitor.Hardware; 
namespace Get_CPU_Temp5 
{ 
    class Program 
    { 
     public class UpdateVisitor : IVisitor 
     { 
      public void VisitComputer(IComputer computer) 
      { 
       computer.Traverse(this); 
      } 
      public void VisitHardware(IHardware hardware) 
      { 
       hardware.Update(); 
       foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this); 
      } 
      public void VisitSensor(ISensor sensor) { } 
      public void VisitParameter(IParameter parameter) { } 
     } 
     static void GetSystemInfo() 
     { 
      UpdateVisitor updateVisitor = new UpdateVisitor(); 
      Computer computer = new Computer(); 
      computer.Open(); 
      computer.CPUEnabled = true; 
      computer.Accept(updateVisitor); 
      for (int i = 0; i < computer.Hardware.Length; i++) 
      { 
       if (computer.Hardware[i].HardwareType == HardwareType.CPU) 
       { 
        for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++) 
        { 
         if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature) 
           Console.WriteLine(computer.Hardware[i].Sensors[j].Name + ":" + computer.Hardware[i].Sensors[j].Value.ToString() + "\r"); 
        } 
       } 
      } 
      computer.Close(); 
     } 
     static void Main(string[] args) 
     { 
      while (true) 
      { 
       GetSystemInfo(); 
      } 
     } 
    } 
} 

WMI:

using System; 
using System.Diagnostics; 
using System.Management; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Double CPUtprt = 0; 
     System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature"); 
     foreach (System.Management.ManagementObject mo in mos.Get()) 
     { 
      CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732)/10; 
      Console.WriteLine("CPU temp : " + CPUtprt.ToString() + " °C"); 
     } 
    } 
} 

Я нашел хороший учебник здесь, я получаю темп процессора успешно.

http://www.lattepanda.com/topic-f11t3004.html

 Смежные вопросы

  • Нет связанных вопросов^_^