CPU Takt und Temperatur lassen sich nicht aktualisieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von DeDelner.

    CPU Takt und Temperatur lassen sich nicht aktualisieren

    Hallöchen,

    ich bin ja noch ein kleiner Anfänger, habe jedoch ein Problem, was ich nicht lösen kann.

    Folgendes: Ich möchte, dass der aktuelle Takt von der CPU sich aktualisiert, genauso wie mit der Temperatur. Problem ist, dass sich nur die Temperatur ändern, wenn ich die .exe als Administrator öffne und es unter der Form1_Load Funktion packe. Die Temperatur ändert sich nur wenn ich jedes mal die .exe immer neu starte. Aber der CPU Takt bleibt immer gleich.

    Ich hatte es mal unter dem Timer gepackt, jedoch ändert sich gar nichts. Die Temperatur ändert sich wieder nur wenn ich es immer neu starte als Administrator. Und als ich versucht habe den CPU Takt unter dem Timer zu packen, hatte ich einen unendlichen langen SplashScreen. Die x.Refresh Funktion habe ich auch probiert aber kein Erfolg.

    Ich glaube ich hab was übersehen oder irgendwas ist am Code falsch.

    Ich hab am besten den ganzen Code kopiert. Vielleicht kann auch irgendetwas anderes der Grund sein für das Problem.

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class Form1
    3. Dim X, Y As Integer
    4. Dim NewPoint As New System.Drawing.Point
    5. Dim objQuery As New ObjectQuery("SELECT * FROM Win32_Processor")
    6. Dim objSearcher As New ManagementObjectSearcher(objQuery)
    7. Dim searcher As New ManagementObjectSearcher("root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Me.Close()
    10. End Sub
    11. Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
    12. SplashScreen.Location = Me.Location
    13. My.Settings.Form_Location = New System.Drawing.Point(Me.Location.X, Me.Location.Y)
    14. My.Settings.Save()
    15. End Sub
    16. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    17. Me.Location = New System.Drawing.Point(My.Settings.Form_Location.X, My.Settings.Form_Location.Y)
    18. Label6.Parent = PictureBox1
    19. Label6.BackColor = Color.Transparent
    20. Label6.Location = New Point(1, 55)
    21. Label7.Parent = PictureBox1
    22. Label7.BackColor = Color.Transparent
    23. Label7.Location = New Point(1, 71)
    24. Label8.Parent = PictureBox2
    25. Label8.BackColor = Color.Transparent
    26. Label8.Location = New Point(1, 55)
    27. Label9.Parent = PictureBox2
    28. Label9.BackColor = Color.Transparent
    29. Label9.Location = New Point(1, 71)
    30. End Sub
    31. Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
    32. X = Control.MousePosition.X - Me.Location.X
    33. Y = Control.MousePosition.Y - Me.Location.Y
    34. End Sub
    35. Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    36. If e.Button = Windows.Forms.MouseButtons.Left Then
    37. NewPoint = Control.MousePosition
    38. NewPoint.X -= (X)
    39. NewPoint.Y -= (Y)
    40. Me.Location = NewPoint
    41. End If
    42. End Sub
    43. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    44. Dim CPUUssage As Integer
    45. CPUUssage = CPUPerformanceCounter.NextValue
    46. PictureBox1.Height = 1.49 * (100 - CPUUssage)
    47. Label6.Text = CPUUssage.ToString
    48. Label8.Text = CPUUssage.ToString
    49. Dim RAMUssage As Double
    50. RAMUssage = (My.Computer.Info.TotalPhysicalMemory - My.Computer.Info.AvailablePhysicalMemory) / 1024 / 1024 / 1024
    51. Label5.Text = RAMUssage.ToString("N") & " GB"
    52. Dim RAMUssagePercent As Long
    53. RAMUssagePercent = My.Computer.Info.AvailablePhysicalMemory * 100
    54. Dim RAMUssagePercentFinal As Long
    55. RAMUssagePercentFinal = Val(RAMUssagePercent / My.Computer.Info.TotalPhysicalMemory)
    56. PictureBox3.Height = 0.53 * RAMUssagePercentFinal
    57. For Each MemObj As ManagementObject In objSearcher.Get
    58. Label1.Text = Convert.ToUInt64(MemObj("CurrentClockSpeed")).ToString()
    59. Label3.Text = MemObj("Name").ToString
    60. Next
    61. For Each queryObj As ManagementObject In searcher.Get()
    62. Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
    63. temp = (temp - 2732) / 10.0
    64. Label10.Text = temp.ToString & " °C"
    65. Next
    66. End Sub
    67. End Class


    Ich freue mich auf jede Antwort!
    LG Christian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DeDelner“ ()

    Noch ein Tipp:
    Schmeiß zunächst allen GUI-Schnich-Schnack raus, kümmere Dich um die Daten. Pack die Abfrage in eine Button_Click und die Werte in Labels oder eine RichTextBox.
    Weiter nix.
    Wenn das läuft, machen wir mit der Überwachung weiter. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ThePlexian
    Ne, also das habe ich nicht vergessen :P

    @RodFromGermany
    Danke für die Antwort! Nun also ich habe ein neues Projekt erstellt ohne weiteren schnick schnack und die Daten über den Button aufrufen lassen, alles geht. Nur das einzige was sich an den werten ändern wenn ich den Button nochmal klicke, ist die Taktung die sich um 1 MHz ändert wenn ich z.B. Minecraft starte. Und schon wieder ändert sich die CPU Temperatur nur wenn ich das Programm als Administrator komplett neustarte :/


    Unnötige Vollzitate entfernt
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    Poste bitte mal den Code der Form

    DeDelner schrieb:

    ohne weiteren schnick schnack
    Welche Verweise verwendest Du?
    -----
    Und gib einem Projekt Option Strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Momentan hab ich nur System.Management zu den Verweisen hinzugeügt.
    Option Strict habe ich in den Optionen eingeschaltet. Für was bringt diese Funktion?

    VB.NET-Quellcode

    1. Imports System.Management
    2. Public Class Form1
    3. Dim objQuery As New ObjectQuery("SELECT * FROM Win32_Processor")
    4. Dim objSearcher As New ManagementObjectSearcher(objQuery)
    5. Dim searcher As New ManagementObjectSearcher("root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
    7. For Each MemObj As ManagementObject In objSearcher.Get
    8. Label1.Text = Convert.ToUInt32(MemObj("CurrentClockSpeed")).ToString()
    9. Next
    10. For Each queryObj As ManagementObject In searcher.Get()
    11. Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
    12. temp = (temp - 2732) / 10.0
    13. Label2.Text = temp.ToString & " °C"
    14. Next
    15. Label1.Refresh()
    16. Label2.Refresh()
    17. End Sub
    18. End Class



    Unnötiges Vollzitat entfernt
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    DeDelner schrieb:

    Für was bringt diese Funktion?
    Sie sorgt dafür, dass Du stets die richtigen Datentypen verwendest, sie zwingt Dich zu einer besseren Programmier-Disziplin.
    Das müsste man über einen längeren Zeitraum überwachen.
    Pack die Instanziierung der Management-Variablen direkt in die Abfrage-Prozedur.
    OK. Der Takt-Wert flackert, die Temperatur ändert sich nicht.
    Möglicherweise hast Du da einen systematischen Fehler drin, also die Parameter falsch gewählt. Dazu kann ich nix sagen. Woher hast Du diese Quellen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schau Dir mal das von @Gather an ist dort gut erklärt ;)

    CPU-, RAM- Auslastung, CPU-Temperatur und freien Speicher der jeweiligen Festplatte anzeigen lassen

    Ist zwar schon etwas älter aber für den Einstieg ganz toll :D

    Bin auch grad dabei sowas zu machen :D


    MFG Netlogger :D
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??
    Ja nähmlich dort habe ich ja den Code her für die CPU Temperatur :P Nur will ich das in einem Label ist, der sich mit einem Timer aktualisiert und nicht in einer MessageBox.


    Unnötiges Vollzitat entfernt
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    @DeDelner Würdest Du bitte die Freundlichkeit besitzen, nicht jeden Post über Dir vollständig zu zitieren?
    Das zu lesen nervt erheblich. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!