Как получить скорость вращения вентилятора моего графического или центрального процессора с помощью OpenHardwareMonitor?

1

Это код:

public float? cpuView(bool pause , CpuTemperature cpuTemp , Form1 f1 , List<string> myData , float? myCpuTemp , Button b1, decimal numeric)
{
    try
    {
        if (pause == true)
        {
        }
        else
        {
            Trace.WriteLine("");
            foreach (var hardwareItem in myComputer.Hardware)
            {
                if (hardwareItem.HardwareType == HardwareType.CPU)
                {
                    hardwareItem.Update();
                    foreach (IHardware subHardware in hardwareItem.SubHardware)
                    subHardware.Update();
                    foreach (var sensor in hardwareItem.Sensors)
                    {
                        cpuTemp.SetValue("sensor", sensor.Value.ToString());
                        if (sensor.SensorType == SensorType.Fan)
                        {
                            MessageBox.Show("test");
                            sensor.Hardware.Update();
                            cpuTemp.GetValue("sensor", sensor.Value.ToString());
                            if (!f1.IsDisposed)//f1.IsHandleCreated && !f1.IsDisposed)
                            {
                                Thread.Sleep(1000);
                                f1.Invoke(new Action(() => myData.Add("Cpu Temeprature --- " + sensor.Value.ToString())));
                            }
                            myCpuTemp = sensor.Value;
                            //if (sensor.Value > 60)
                            //{
                            CpulabelTemp = sensor.Value;
                            cpuSensorValues.Add(sensor.Value);
                            if (cpuSensorValues.Count == 300 && sensor.Value >= (float)numeric)                 
                            {
                                float a = ComputeStats(cpuSensorValues).Item1;
                                float b = ComputeStats(cpuSensorValues).Item2;
                                float c = ComputeStats(cpuSensorValues).Item3;
                                Logger.Write("********************************");
                                Logger.Write("CPU Minimum Temperature Is ===> " + a);
                                Logger.Write("CPU Maximum Temperature Is ===> " + b);
                                Logger.Write("CPU Average Temperature Is ===> " + c);
                                Logger.Write("********************************" + Environment.NewLine);                                           
                                cpuSensorValues = new List<float?>();
                            }
                            b1.Enabled = true;
                            //}
                            break;
                        }
                    }
                }
            }
        }
    }
    catch(Exception err)
    {
        Logger.Write("There was an exception: " + err.ToString());
    }
    return myCpuTemp;
}

В этой строке:

if (sensor.SensorType == SensorType.Fan)

Вместо этого Fan это была температура. Когда это была температура, у нее не было проблем. Но как только я изменил его на Fan, чтобы получить скорость вентилятора CPU/GPU, он не будет в нем прыгать через этот IF и продолжать.

Он никогда не попадает в строку MessageBox.Show.

В чем может быть проблема? Пробовал в Google, но ничего до сих пор.

Теги:
winforms
openhardwaremonitor

1 ответ

1

Ваша проблема - условная

if (hardwareItem.HardwareType == HardwareType.CPU)

Вентиляторы не находятся в CPU. Вам нужно использовать соответствующий HardwareType, который появляется у поклонников, возможно, HardwareType.Mainboard.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню