C# Hämta CPU temperatur via WMI
Hej! Som titeln lyder så försöker jag få fram CPU temperaturen via WMI i C#.
Problemet jag har är att det verkar inte som att temperaturen uppdateras, den står alltid på 29,8 grader..
public void GetCPUTemperature()
{
double temp = 0;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@root\WMI, "SELECT * FROM MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject obj in searcher.Get())
{
temp = Convert.ToDouble(obj["CurrentTemperature"].ToString());
temp = (temp - 2732) / 10.0;
}
currentTemp = temp;
}
Så här ser koden ut..
Spelar ingen roll om CPUn ligger på 50 grader enligt Coretemp så visar alltid min app att det är 29,8 grader.
Koden jag använder kommer ursprunligen ifrån:
http://stackoverflow.com/questions/1195112/how-to-get-cpu-temperature
Men har gjort om den så att jag endast retunerar en string istället för list. (Med en lista får jag fram 27,8 och 29,8. Alltid.)
Sedan använde jag WMI code generator från Microsoft och den genererar följande kod:
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
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);
}
}
}
}
Denna retunerar (I console) 3010 och 3030 som temperaturer varje gång. (Och enligt uträkningen "temp = (temp - 2732) / 10.0;" så stämmer ju detta med 27,8 och 29,8.)
Någon som kan säga om jag har gjort helt fel?
Eller är det någon som har en bättre metod? (Som kanske kan vägleda mig lite..)
Mvh
[EDIT]Läste att vissa moderkort endast uppdaterar "MSAcpi_ThermalZoneTemperature" vid uppstart och ej kontinuerligt.. Men det måste ju gå att kringgå!?
Coretemp kan ju hämta temperaturen (Som också visar samma som BIOS)