CPU temperatura c#

di il
4 risposte

CPU temperatura c#

Lo so, ci sono molti tutorial su come ottenere questo valore. Ma ne ho provati tanti. Ho scoperto una cosa interessante, puoi effettivamente ottenere un certo valore del PC dal monitor delle prestazioni (come in questo video https://www.youtube.com/watch?v=niKP91D50Ko&t=1126s&ab_channel=CampNerd), e so come ottenerli, ma come dice qui (https://answers.microsoft.com/en-us/windows/forum/all/performance-monitor-counters-for-system/dd508391-0005-44b7-a5a3-ccdfff0ef46f) non c'è il valore della temperatura della CPU sul monitor delle prestazioni.

Così ho scoperto un'altra cosa fantastica, le classi per l'hardware per Windows 10 (https://docs.microsoft.com/it-it/windows/win32/cimwin32prov/computer-system-hardware-classes?redirectedfrom=MSDN). E cercando di nuovo c'è questo: Win32_TemperatureProbe class (https://docs.microsoft.com/it-it/windows/win32/cimwin32prov/win32-temperatureprobe).

Ma non riesco a trovare un tutorial che insegni come ottenere i valori. Dopo aver LETTO TUTTA la classe Win32_TemperatureProbe, ho scoperto che quello di cui ho bisogno è in CurrentReading, penso... Quindi ora ho creato un timer nel mio progetto (in Visual Studio) e ogni 1000 millisecondi prende qualche altro valore dal monitor delle prestazioni.. .finora niente sus. Ma come ho detto, il monitor delle prestazioni non prende la temperatura della CPU. Quindi voglio prenderlo dalla classe Win32_TemperatureProbe. Come posso farlo? (Ho scritto tutto così non pensi che non abbia fatto il minimo sforzo).

Ho seguito questo tutorial: https://youtube.com/watch?v=W7vPgAqC4fI&ab_channel=CampNerd e ho cambiato il suo Win32_UserAccount con Win32_TemperatureProbe e ho cambiato la sua Caption con CurrentReading...

La sua funzione modificata da me:

private string GetTemp() {
    ManagementObjectSearcher s = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_TemperatureProbe");
    foreach (ManagementObject wmi in s.Get()) {
        try
        {
            return wmi.GetPropertyValue("CurrentReading").ToString();
        }
        catch { }
    }
    return "err";
}
Mi restituisce sempre "err".

Quindi vorrei sapere come, ad esempio, il programma MSI Afterburner prende la temperatura ...

4 Risposte

  • Re: CPU temperatura c#

    Ciao

    Credo che reperire la temperatura del processore non sia così facile:
    - Siamo sicuri che fornitori diversi di CPU forniscano i dati nello stesso modo?
    - Come si gestiscono i PC con più processori?


    Ho cercato velocemente in internet ed ho trovato questa libreria. Vedi te se provarla o meno: HardwareProviders.CPU.Standard
  • Re: CPU temperatura c#

    PiGi78 ha scritto:


    Ciao

    Credo che reperire la temperatura del processore non sia così facile:
    - Siamo sicuri che fornitori diversi di CPU forniscano i dati nello stesso modo?
    - Come si gestiscono i PC con più processori?


    Ho cercato velocemente in internet ed ho trovato questa libreria. Vedi te se provarla o meno: HardwareProviders.CPU.Standard
    Ho trovato questo: https://www.microsoft.com/en-us/download/details.aspx?id=8572 e praticamente esegue qualsiasi wmi tu voglia in c#, ho provato con Win32_Processor con il parametro Name, e mi restituisce il nome della cpu. Però se provo con Win32_TemperatureProbe e scelgo un qualsiasi valore, non succede niente proprio niente, apre la finestra ma senza una risposta. Può essere che il mio Ryzen 5 3600 non possa ritornarmi il valore? mi sebrea strano perchè ci sono i programmi come Core Temp e o Msi afterburner che senza problema mi restituiscono il valore della temp della cpu
  • Re: CPU temperatura c#

    Se non l'hai già fatto metti un breakpoint sulla riga in cui ottieni la variabile "s" ed esplorane il contenuto
  • Re: CPU temperatura c#

    HO TROVATO LA SOLUZIONE DOPO 4 ORE DI RICERCHE NON CE LA FACCIO PIù
    Quindi ho trovato questo video: https://www.youtube.com/watch?v=Opdw2IToqgM&ab_channel=EventHandler parlando di gpu temp... ho scaricato la libreria di open hardawre monitor https://openhardwaremonitor.org/files/openhardwaremonitor- v0.9.6.zip
    ho installato tutti i file .dll dal .zip in Visual Studio (tasto destro> aggiungi riferimento> browe> seleziona i 4 file). Quindi ora ho aggiunto utilizzando OpenHardwareMonitor.Hardware;
    E ora posso ottenere la temperatura della cpu da questa funzione:
    private string GetCPUtemp()
            {
                Computer c = new Computer()
                {
                    CPUEnabled = true
                }; c.Open();
    
                foreach (var hardware in c.Hardware)
                {
                    if (hardware.HardwareType == HardwareType.CPU)
                    {
                        hardware.Update();
                        foreach (var sensor in hardware.Sensors)
                        {
                            if (sensor.SensorType == SensorType.Temperature)
                                lbl_cpu_temp.Text = sensor.Value.GetValueOrDefault() + " °C";
                        }
                    }
                }
                return "err";
            }
    
    Risponderò a tutte le tue domande se non hai capito
Devi accedere o registrarti per scrivere nel forum
4 risposte