C# OpenHardwareMonitorlib.dll не может использовать индекс для разных ядер

Я использую OpenHardwareMonitorLib.dll, чтобы сделать программу для себя, но я хочу иметь возможность просматривать нагрузку и температуру каждого ядра. Нажмите на ссылку Изображение, чтобы просмотреть WMI ниже.

Образ

Итак, как вы можете видеть каждый экземпляр, то есть каждое ядро ​​моего процессора Intel имеет 4 ядра, то есть 4 экземпляра... ну 5 из-за общей нагрузки, я хочу иметь возможность использовать индекс, чтобы позволить мне извлекать каждый экземпляр, но я изо всех сил, потому что.dll-файл имеет общедоступные методы доступа get, если я прав, поправьте меня, если я не прав.

Я попытался установить переменную sensor.Index, но ошибка появляется только для чтения, поэтому yano... Я пытался, если структуры управления, например, если sensor.Index == 1 ... Но это не работает автоматически хватает последний индекс.

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;
using OpenHardwareMonitor.Hardware;

namespace Hardware
{
    public partial class Temps : Form
    {
    Timer timer;

    private double ramusedpt;
    private double ramusedptx;
    private double systemram;
    int xaxis;
    Computer myComputer;
    ISensor NvdGPUTemperatureSensor, ATIGPUTemperatureSensor, CPUTemperatureSensor, NvdGPUFanSpeed, ATIGPUFanSpeed,
        NvdGPUFanCtrl, GPUShaderSpeed, GPUMemoryLoad, CPUFanSpeed, RamUsage, RamUsed, CPULoadSensor, CPUCoreTest;
    public Temps()
    {
        InitializeComponent();
        myComputer = new Computer();
        myComputer.Open();
        myComputer.GPUEnabled = true;
        myComputer.CPUEnabled = true;
        myComputer.FanControllerEnabled = true;
        myComputer.MainboardEnabled = true;
        myComputer.RAMEnabled = true;
        myComputer.HDDEnabled = true;
        string ram = Getcomponent("Win32_OperatingSystem", "TotalVisibleMemorySize");
        systemram = double.Parse(ram);
        systemram = Math.Round(systemram / 1048576);
        foreach (var hardwareItem in myComputer.Hardware)
        {
            foreach (var subhardware in hardwareItem.SubHardware)
            {
                subhardware.Update();
                if (subhardware.Sensors.Length > 0)
                {
                    foreach (var sensor in subhardware.Sensors)
                    {
                        if (sensor.SensorType == SensorType.Fan)
                        {
                            CPUFanSpeed = sensor;
                        }
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.GpuNvidia)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Temperature)
                    {
                        NvdGPUTemperatureSensor = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.GpuAti)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Temperature)
                    {
                        ATIGPUTemperatureSensor  = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.CPU)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Temperature)
                    {
                        CPUTemperatureSensor = sensor;
                    }
                }
            }
            // GPU Fan Sensor
            if (hardwareItem.HardwareType == HardwareType.GpuNvidia)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Fan)
                    {
                        NvdGPUFanSpeed = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.GpuAti)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Fan)
                    {
                        ATIGPUFanSpeed = sensor;
                    }
                }
            }
            // GPU Fan Control
            if (hardwareItem.HardwareType == HardwareType.GpuNvidia)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Control)
                    {
                        NvdGPUFanCtrl = sensor;
                    }
                }
            }
            //
            if (hardwareItem.HardwareType == HardwareType.GpuNvidia)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Clock)
                    {
                        GPUShaderSpeed = sensor;
                    }
                }
            }
            if(hardwareItem.HardwareType == HardwareType.GpuNvidia)
            {
                foreach(var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Load)
                    {
                        GPUMemoryLoad = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.RAM)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Data)
                    {
                        RamUsage = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.RAM)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Factor)
                    {
                        RamUsed = sensor;
                    }
                }
            }
            if (hardwareItem.HardwareType == HardwareType.CPU)
            {
                foreach (var sensor in hardwareItem.Sensors)
                {
                    if (sensor.SensorType == SensorType.Load)
                    {
                        CPULoadSensor = sensor;
                    }
                }
            }
        }
        timer = new Timer();
        timer.Interval = 500;
        timer.Tick += new EventHandler(timer1_Tick);
        timer.Start();
    }


    private void timer1_Tick(object sender, EventArgs e)
    {
        string gpu = Getcomponent("Win32_VideoController", "Name");
        GPUlabel.Text = gpu;
        gpuFanLabel.Text = Convert.ToString(NvdGPUFanSpeed.Identifier);
        cpulabel.Text = Convert.ToString(CPUTemperatureSensor.Name);
        //GPU Temp sensor
        if (NvdGPUTemperatureSensor != null && GPUlabel.Text.Contains("NVIDIA"))
        {
            NvdGPUTemperatureSensor.Hardware.Update();
            gpuCurrent.Text = Convert.ToString(NvdGPUTemperatureSensor.Value);
            gpuMax.Text = Convert.ToString(NvdGPUTemperatureSensor.Max);
        }
        else if (ATIGPUTemperatureSensor != null && GPUlabel.Text.Contains("AMD"))
        {
            ATIGPUTemperatureSensor.Hardware.Update();
            gpuCurrent.Text = Convert.ToString(ATIGPUTemperatureSensor.Value);
            gpuMax.Text = Convert.ToString(ATIGPUTemperatureSensor.Max);
        }
        else
        {
            gpuCurrent.Text = "N/A";
            gpuMax.Text = "N/A";
        }
        // CPU temp sensor
        if (CPUTemperatureSensor != null)
        {
            CPUTemperatureSensor.Hardware.Update();
            cputxtval.Text = Convert.ToString(CPUTemperatureSensor.Value);
            cputxtmax.Text = Convert.ToString(CPUTemperatureSensor.Max);
        }
        else
        {
            cputxtval.Text = "N/A";
            cputxtmax.Text = "N/A";
        }
        // GPU Fan Speed
        if (NvdGPUFanSpeed != null && GPUlabel.Text.Contains("NVIDIA"))
        {
            NvdGPUFanSpeed.Hardware.Update();
            gpuFanTxt.Text = Convert.ToString(NvdGPUFanSpeed.Value);
            gpuFanMax.Text = Convert.ToString(NvdGPUFanSpeed.Max);
        }
        else if (ATIGPUFanSpeed != null && GPUlabel.Text.Contains("AMD"))
        {
            ATIGPUFanSpeed.Hardware.Update();
            gpuFanTxt.Text = Convert.ToString(ATIGPUFanSpeed.Value);
            gpuFanMax.Text = Convert.ToString(ATIGPUFanSpeed.Max);
        }
        else
        {
            gpuFanTxt.Text = "N/A";
            gpuFanMax.Text = "N/A";
        }
        // GPU Fan Speed Control
        if (NvdGPUFanCtrl != null)
        {
            NvdGPUFanCtrl.Hardware.Update();
            gpufanpb.Value = ((int)NvdGPUFanCtrl.Value);
        }
        else
        {
            MessageBox.Show("Failed to grab Fan Control value.", "Failure");
        }
        // GPU Shader Speed
        if (GPUShaderSpeed != null )
        {
            GPUShaderSpeed.Hardware.Update();
            gpuShaderVal.Text = Convert.ToString(Convert.ToInt16(GPUShaderSpeed.Value));
            gpuShaderMax.Text = Convert.ToString(Convert.ToInt16(GPUShaderSpeed.Max));
        }
        else
        {
            gpuShaderVal.Text = "N/A";
            gpuShaderMax.Text = "N/A";
        }
        // GPU Memory Load
        if (GPUMemoryLoad != null)
        {
            GPUMemoryLoad.Hardware.Update();
            gpuTestVal.Text = Convert.ToString(Math.Round((double)GPUMemoryLoad.Value, 1));
            gpuTestMax.Text = Convert.ToString(Math.Round((double)GPUMemoryLoad.Max, 1));
            gpuMempb.Value = ((int)GPUMemoryLoad.Value);
        }
        else
        {
            gpuTestVal.Text = "N/A";
            gpuTestMax.Text = "N/A";
        }
        // CPU Fan Speed
        if (CPUFanSpeed != null)
        {
            CPUFanSpeed.Hardware.Update();
            cpuFanVal.Text = Convert.ToString((int)(float)CPUFanSpeed.Value);
            cpuFanMax.Text = Convert.ToString((int)(float)CPUFanSpeed.Max);
        }
        else
        {
            cpuFanVal.Text = "N/A";
            cpuFanMax.Text = "N/A";
        }
        // RAM Usage
        if (RamUsage != null)
        {
            RamUsage.Hardware.Update();
            ramVal.Text = Convert.ToString(Math.Round((double)RamUsage.Value, 2));
            ramValMax.Text = Convert.ToString(Math.Round((double)RamUsage.Max, 2));
            ramusedpt = Math.Round((double)RamUsage.Value, 2);
            ramusedptx = Math.Round((Double)RamUsage.Max, 2);

        }
        else
        {
            ramVal.Text = "N/A";
            ramValMax.Text = "N/A";
        }
        // Ram Used
        if (RamUsage != null)
        {

            usedRamVal.Text = Convert.ToString(systemram - ramusedpt);
            usedRamMax.Text = Convert.ToString(systemram - ramusedptx);
        }
        else
        {   
            usedRamVal.Text = "N/A";
            usedRamMax.Text = "N/A";
        }
        if (CPUCoreTest != null)
        {
            CPUCoreTest.Hardware.Update();
            cpucore2txt.Text = Convert.ToString(CPUCoreTest.Value);
        }
        else
        {
            cpucore2txt.Text = "N/A";
        }
        try
        {
            chart1.Series[0].Points.AddXY(xaxis++, CPUTemperatureSensor.Value);
            chart1.Series[1].Points.AddXY(xaxis, NvdGPUTemperatureSensor.Value);
            chart1.Series[2].Points.AddXY(xaxis, ramusedpt);
        }
        catch
        {
        }
    }
    private static string Getcomponent(string hwclass, string syntax)
    {
        StringBuilder comp = new StringBuilder();
        ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM " + hwclass);
        foreach (ManagementObject mj in mos.Get())
            comp.Append(Convert.ToString(mj[syntax]));
        return comp.ToString();
    }

}

}

http://openhardwaremonitor.org/wordpress/wp-content/uploads/2011/04/OpenHardwareMonitor-WMI.pdf

Любая помощь приветствуется

1 ответ

Мне удалось заставить работать структуру управления if. Размещение как это может помочь людям в будущем

if (hardwareItem.HardwareType == HardwareType.CPU)
                {
                    foreach (var sensor in hardwareItem.Sensors)
                    {
                        if (sensor.SensorType == SensorType.Load)
                        {
                            if (sensor.Index == 1)
                            {
                                CPUCoreTest2 = sensor;
                            }
                        }
                    }
                }

В основном индекс для 0 - это общее количество процессоров. 1 это ядро ​​1. 2 это ядро ​​2. 3 это ядро ​​3. 4 iscore 4.etc ...:)

Другие вопросы по тегам