2015-04-13 1 views
2

Je suis en train de créer un programme de surveillance personnel pour les performances du système, et j'ai des problèmes pour trouver comment C# récupère les informations de CPU et de température GPU. J'ai déjà le programme récupérer les informations CPU Load et Frequency (ainsi que d'autres choses) via PerformanceCounter, mais je n'ai pas pu trouver les variables Instance, Object et Counter pour la température du processeur.CPU C# et GPU Temp

En outre, je dois être en mesure d'obtenir la température de plus d'un GPU, car j'en ai deux.

Que dois-je faire?

+5

Jetez un oeil à OpenHardwareMonitor, écrit en C# et opensource. – leppie

+0

Avez-vous essayé l'une des solutions proposées dans cette recherche, certaines d'entre elles ont des extraits de code: https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q= obtenir% 20cpu% 20temperature% 20c% 23 –

+1

duplication possible de [Comment obtenir la température du CPU?] (http://stackoverflow.com/questions/1195112/how-to-get-cpu-temperature) – Console

Répondre

0

Utilisez la classe MSAcpi_ThermalZoneTemperature dans WMI.

+3

Cela nécessite vraiment un code L'exemple et l'instruction associée comme WMI n'est pas une construction C#. – Gusdor

+0

@Gusdor Mais il y a beaucoup d'échantillons C# WMI en ligne si vous effectuez une recherche. C'est certainement un pas dans la bonne direction. – Rup

+0

Je vais regarder autour de moi et voir ce que je peux obtenir. Je n'ai pas vraiment besoin d'un bloc de code complexe pour cela, j'ai juste besoin de récupérer le temps. Après cela, j'ai tout géré. J'espère que WMI peut me donner cette solution. – DanG

2

Vous pouvez utiliser le WMI pour cela, il y a un générateur de code C# pour WMI qui aide beaucoup lors de la création de requêtes WMI car il n'est pas bien documenté.

Le générateur de code WMI peut être trouvé ici: http://www.microsoft.com/en-us/download/details.aspx?id=8572

un essai rapide génère quelque chose comme ceci:

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); 
     } 
    } 

Ce ne peut pas être exactement ce dont vous avez besoin d'essayer juste avec les propriétés et les classes disponibles

0

Vous pouvez obtenir la température du processeur à la fois de manière WMI et Openhardwaremonitor.

Ouvert 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"); 
     } 
    } 
} 

J'ai trouvé un bon tutoriel ici, je reçois la température du CPU avec succès.

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