web-dev-qa-db-ja.com

CPU温度監視

プログラミングプロジェクトで、CPUとGPUからの温度測定値にアクセスしたいと思います。 C#を使用します。さまざまなフォーラムから、さまざまなボードの情報にアクセスするために必要な特定の情報と開発者リソースがあるという印象を受けます。 MSI NF750-G55ボードを持っています。 MSIのWebサイトには、探している情報はありません。私は彼らの技術サポートを試しました、そして私が話をした担当者は彼らがそのような情報を持っていないと述べました。その情報を取得する方法がなければなりません。

何かご意見は?

22
Paul

少なくともCPU側では、WMIを使用できます。

名前空間\オブジェクトはroot\WMI, MSAcpi_ThermalZoneTemperature

サンプルコード:

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("root\\WMI",
                                 "SELECT * FROM MSAcpi_ThermalZoneTemperature");

ManagementObjectCollection collection = 
    searcher.Get();

foreach(ManagementBaseObject tempObject in collection)
{
    Console.WriteLine(tempObject["CurrentTemperature"].ToString());
}

これにより、未加工の形式で温度が得られます。そこから変換する必要があります:

kelvin = raw / 10;

celsius = (raw / 10) - 273.15;

Fahrenheit = ((raw / 10) - 273.15) * 9 / 5 + 32;
20
Justin Niessner

Windowsでハードウェア関連のコーディングを行う最善の方法は、_ [〜#〜] wmi [〜#〜] を使用することです。これはCode Creator Microsoftのツールです。このツールは、ハードウェア関連のデータで探しているものと、使用したい.Net言語に基づいてコードを作成します。

現在サポートされている言語は、C#、Visual Basic、VB Scriptです。

2
Ashraf Abusada

ご了承ください MSAcpi_ThermalZoneTemperatureはCPUの温度ではなく、マザーボードの温度を示します。また、ほとんどのマザーボードはこれをWMI経由で実装しないことに注意してください。

Open Hardware Monitorを試すことはできますが、最新のプロセッサのサポートはありません。

internal sealed class CpuTemperatureReader : IDisposable
{
    private readonly Computer _computer;

    public CpuTemperatureReader()
    {
        _computer = new Computer { CPUEnabled = true };
        _computer.Open();
    }

    public IReadOnlyDictionary<string, float> GetTemperaturesInCelsius()
    {
        var coreAndTemperature = new Dictionary<string, float>();

        foreach (var hardware in _computer.Hardware)
        {
            hardware.Update(); //use hardware.Name to get CPU model
            foreach (var sensor in hardware.Sensors)
            {
                if (sensor.SensorType == SensorType.Temperature && sensor.Value.HasValue)
                    coreAndTemperature.Add(sensor.Name, sensor.Value.Value);
            }
        }

        return coreAndTemperature;
    }

    public void Dispose()
    {
        try
        {
            _computer.Close();
        }
        catch (Exception)
        {
            //ignore closing errors
        }
    }
}

公式ソース からZipをダウンロードし、プロジェクトにOpenHardwareMonitorLib.dllへの参照を抽出して追加します。

0
Ali Zahid