CPU Temperatur will sich nicht aktualisieren

  • VB.NET

Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von Jonas Jelonek.

    CPU Temperatur will sich nicht aktualisieren

    Hallo,

    bei meiner Anwendung will sich die CPU Temperatur nicht aktualisieren lassen. Und sie bleibt immer auf 59 °C. Dabei wenn ich aber SpeedFan offen habe, dann plötzlich aktualisiert sich die Temperatur. Dabei weiß man ja, dass die Anwendung als Administartor laufen soll. Ich habe eine .dll erstellt, damit man es nicht immer machen muss. Starte ich die Anwendung, ist es immer noch gewohnt, dass die Temperatur immer noch nicht aktualisert. Versuche ich aber SpeedFan zu öffen, dann aktualisiert sich die Temperatur dort auch nicht! Könnt ihr mir sagen, was das Problem ist? Was man dagegen machen kann?

    Ich danke für eure Antworten!
    MFG Christian

    VB.NET-Quellcode

    1. Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
    2. Try
    3. Dim searcher As New ManagementObjectSearcher("root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
    4. For Each queryObj As ManagementObject In searcher.Get()
    5. Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
    6. temp = (temp - 2732.0) / 10.0
    7. Label3.Text = temp.ToString
    8. Next
    9. Catch err As ManagementException
    10. Label3.Text = "--"
    11. End Try
    12. End Sub
    Ermittele die Temperatur mit meinem Tutorial: [VB.NET] OpenHardwareMonitorLib benutzen
    Hier zeige ich es dir:

    VB.NET-Quellcode

    1. 'Die Funktion zum Ermitteln der Temperatur eines Kernes:
    2. Private Function GetCoreTemp(ByVal Core As Integer) As String
    3. For Each Hardware In Computer.Hardware 'Jede einzelne Hardware heraussuchen
    4. Hardware.Update() 'Die Werte aktualisieren
    5. If Hardware.HardwareType = HardwareType.CPU Then 'Da wir die CPU brauchen, überprüfen wir, ob die aktuelle Hardware die CPU ist.
    6. For Each Sensor In Hardware.Sensors 'Jeden Sensor heraussuchen
    7. If Sensor.SensorType = SensorType.Temperature Then ' Da wir die Temperatur brauchen überprüfen wir, ob der aktuelle Sensor die Temperatur ausliest.
    8. If Sensor.Index = Core Then 'Überprüfen, ob der aktuelle Index der gewünschte Kern ist
    9. Return CDbl(Sensor.Value) 'Wenn alles passt (CPU, Temperatur-Sensor, Kern), wird der Wert zurückgegeben (MH/z)
    10. End If
    11. End If
    12. Next
    13. End If
    14. Next
    15. Return 0.0 'Wenn nichts gefunden wurde, wird '0.0" zurückgegeben.
    16. End Function
    17. Public Sub Refresh()
    18. Dim Temps As Double = 0.0 'Alle Temperaturen
    19. For i = 0 To Enviroment.ProcessorCount 'Für jeden Prozessorkern die Temperatur ermitteln
    20. Temps += GetCoreTemp(i)
    21. Next
    22. Dim CPUTemp As Double = Math.Round(Temps / Enviroment.ProcessorCount) 'Da Temps die Werte von z.B. 4 Kernen enthält, muss noch die Durchschnitts-Temperatur ermitteln
    23. End Sub


    Für Leute, die wissen wollen, warum der Code vielleicht nicht funktioniert: Habt Ihr eure Entwicklungsumgebung oder euer Programm als Admin gestartet?
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Luki-Progger“ ()

    Gerne

    VB.NET-Quellcode

    1. 'Die Funktion zum Ermitteln der Temperatur eines Kernes:
    2. Private Function GetCoreTemp(ByVal Core As Integer) As String
    3. For Each Hardware In Computer.Hardware 'Jede einzelne Hardware heraussuchen
    4. Hardware.Update() 'Die Werte aktualisieren
    5. If Hardware.HardwareType = HardwareType.CPU Then 'Da wir die CPU brauchen, überprüfen wir, ob die aktuelle Hardware die CPU ist.
    6. For Each Sensor In Hardware.Sensors 'Jeden Sensor heraussuchen
    7. If Sensor.SensorType = SensorType.Temperature Then ' Da wir die Temperatur brauchen überprüfen wir, ob der aktuelle Sensor die Temperatur ausliest.
    8. If Sensor.Index = Core Then 'Überprüfen, ob der aktuelle Index der gewünschte Kern ist
    9. Return CDbl(Sensor.Value) 'Wenn alles passt (CPU, Temperatur-Sensor, Kern), wird der Wert zurückgegeben (MH/z)
    10. End If
    11. End If
    12. Next
    13. End If
    14. Next
    15. Return 0.0 'Wenn nichts gefunden wurde, wird '0.0" zurückgegeben.
    16. End Function
    17. Public Sub Refresh()
    18. Dim Temps As Double = 0.0 'Alle Temperaturen
    19. For i = 0 To Enviroment.ProcessorCount 'Für jeden Prozessorkern die Temperatur ermitteln
    20. Temps += GetCoreTemp(i)
    21. Next
    22. '"DeinLabel" musst du durch den Namen deines Label ersetzen.
    23. DeinLabel.Text = Math.Round(Temps / Enviroment.ProcessorCount) & " °C" 'Da Temps die Werte von z.B. 4 Kernen enthält, muss noch die Durchschnitts-Temperatur ermitteln
    24. End Sub
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Achso.
    Du musst noch Computer deklaieren:

    VB.NET-Quellcode

    1. Private Computer As New OpenHardwareMonitorLib.Hardware.Computer

    Hast du alles aus meinem Tutorial befolgt und die OpenHardwareMonitorLib.dll eingebunden(Verweis darauf hinzugefügt)?
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Projekt-Eigenschaften
    Verweise
    Verweis hinzufügen: OpenHardwareMonitorLib.dll raussuchen
    Die musst du vorher hier runterladen musst und die ZIP-entpacken. Dort findest du auch die OpenHardwareMonitorLib.dll
    Grüße,
    Lukas

    Fragen über Themen im Forum per Konversation werden gelöscht und die Absender blockiert...
    Was ist die Fehlermeldung X(
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Okey. Jetzt funktionier alles. Leider... noch ein Manko. Immernoch aktualisiert sich die Temperatur nicht :( . Kann es sein, dass bei

    VB.NET-Quellcode

    1. Public Sub Refresh()
    Refresh grün unterstrichen ist? Es zeigt mir folgendes an:
    sub "Refresh" führt Shadowing für eine überschreibbare Methode in Basis-class "Control" durch. Wenn sie die Basismethode überschrieben möchten, muss die Methode als "Overrides" deklariert werden.