Temperatursensoren und andere Daten des PCs abfragen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von ElBarto.

    Temperatursensoren und andere Daten des PCs abfragen

    Hallo.
    Heute wurde mir von euch ja schon bei einem anderem Problem geholfen, was ich als totaler Anfänger auch noch recht gut verstanden habe und auch erfolgreich umsetzen konnte.
    Jetzt sehe ich mich aber mit einem weitaus schwierigerem Problem konfrontiert.

    Ich programmiere mir mit VB einen Hardware Monitor der mir Daten über folgende Punkte meines Rechners liefern soll:
    - CPU Auslastung, RAM Auslastung und Größe der Auslagerungsdatei. Diese drei Punkte konnte ich erfolgreich programmieren.
    - CPU Temperatur, Grafikkarten Temperatur, Mainboard Temperatur, Grafikarten-RAM Auslastung und Grafikkarten Auslastung. Soweit ich weiß, besitzt VB nicht die Fähigkeit diese Werte direkt auszulesen und hier liegt mein Problem.

    Aber ich habe eine Idee.
    Es gibt ja diverse Programme die diese Daten auslesen können. Wenn diese das schaffen, muss es doch auch für VB eine Möglichkeit geben an die Daten zu kommen oder?
    Man könnte doch entweder ein Programm wie HWiNFO (zeigt sogut wie alle Daten über den Rechner an, darunter auch alle, die ich noch benötige) als Schnittstelle benutzen und mit VB die Daten davon abgreifen oder man programmiert sich in VB irgendwas zurecht, dass VB auch direkt auf die Daten zugreifen kann.

    Ist sowas irgendwie Möglich?
    Und wenn ja, wie gehe ich am besten vor?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Schönen Abend ElBarto,

    Für eines deiner Probleme (CPU Temperatur ausgeben..) fällt mir gerade spontan ein Link aus dem Forum Abteilung Grundwissen ein:
    http://www.vb-paradise.de/programmieren/grundlagen/53427-cpu-temperatur/

    Achtung!
    Manchmal kann es passieren, das Fehler beim benutzen des Code auftreten, dieses kann zumal daran liegen, das dein Prozessor Typ nicht unterstützt wird..

    Bei den weiteren Werten kann ich dir leider momentan nicht weiterhelfen, ich werde mich aber noch einmal erkundigen..

    Gruß,
    Paulmaster

    EDIT:
    Achte bei dem Link besonders auf den Hinweis von "Memo"..

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

    @ Paulmaster:
    Das habe ich schon ausprobiert und geht leider nicht.

    @Bernd:
    VOn diesem WMI hab ich auch viel gelesen, aber ich werde da irgendwie nicht schlau draus. Darüber kann man wohl Windows interne Protokolle/Befehle (oder wie man das auch immer nennt) abfragen.
    Und das was du mir da zeigst sind wohl alle möglichen Protokolle, die man abfragen kann.
    Der Tipp von Paulmaster hat ja auch was mit WMI zu tun, aber klappt ja wie gesagt nicht. Und ich bezweifle auch, dass WMI mir Daten über Grafikkarte und Maiboard liefern kann.

    An anderer Stelle habe ich jetzt auch gelesen, dass VB für das was ich vorhabe auch nicht gedacht ist. Ich werde jetzt jedenfalls anch anderen Möglichkeiten suchen mein Programm umzusetzen. Vielleicht mit C++ oder so. Soll ja aber ziemlich schwierig sein. Aber versuchen kann man es ja.
    Ich hab noch einen interessanten Thread gefunden.
    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!

    picoflop schrieb:

    dass die ganze Sensor-Geschichte nicht normiert ist.

    Lese ich da einen Hauch von Kritik an WInTel? :D :D :D
    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!

    picoflop schrieb:

    Wie schnell dreht der Lüfter

    Das ist sowieso eine Regelstrecke: CPU-Temperatur -> Drehzahl -> CPU-Temperatur ..

    VB.NET-Quellcode

    1. If (Drehzahl am oberen Anschlag) Then
    2. Puter Off
    3. End If
    hatte ich mal, als bei mir eine Klammer des CPU-Lüfters gebrochen war. ;(
    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!

    picoflop schrieb:

    Ist halt hpts deshalb nicht normiert, weil es für den Normalanwender völlig irrelevant ist. Wie schnell dreht der Lüfter, wie heiß ist der Proz, ... wayne?


    Bin aber kein Normalanwender ;) Und dass es für sowas auch Toolt gibt, weiß ich auch und ich benutze die auch schon. Aber diese erfüllen nicht meine Erwartungen.

    picoflop schrieb:

    Das Problem ist eher nicht VB (oder nicht nur), sondern eher die Tatsache, dass die ganze Sensor-Geschichte nicht normiert ist.


    Das heißt also, es gibt eine Lösung dafür, bloß ich muss sie selber finden.

    @RodFromGermany

    Die Möglichkeit 2 sieht sehr vielversprechend aus. Mir ist es übrigens auch egal, ob die gängigen Tools zum auslesen solcher Daten im Hintergrund laufen müssen, damit VB Daten bekommen kann. Mein Ziel bei dem ganzen ist es ja auch "nur" alle gewollten Daten in einem Programm zu vereinen.
    Doch das mit WMI geht schon.

    Nur wenn eine Graphikkarte das nicht hat. Na dann kann WMI auch ncihts auslesen.

    Welche Daten genau versuchst du zu ermitteln.
    Dann schaue ich morgen oder am Sonntag mal ob ich das gestrickt bekomme.


    Bernd

    aber keine 100 stück. bitte
    Bin echt über jede Hilfe froh. Keine sorge. 100 sinds nicht. Nur 5.

    ElBarto schrieb:

    Ich programmiere mir mit VB einen Hardware Monitor der mir Daten über folgende Punkte meines Rechners liefern soll:
    - CPU Auslastung, RAM Auslastung und Größe der Auslagerungsdatei. Diese drei Punkte konnte ich erfolgreich programmieren.
    - CPU Temperatur, Grafikkarten Temperatur, Mainboard Temperatur, Grafikarten-RAM Auslastung und Grafikkarten Auslastung. Soweit ich weiß, besitzt VB nicht die Fähigkeit diese Werte direkt auszulesen und hier liegt mein Problem.

    ElBarto schrieb:

    - CPU Auslastung, RAM Auslastung und Größe der Auslagerungsdatei.

    Die hast du ja.

    ElBarto schrieb:

    - CPU Temperatur, Grafikkarten Temperatur, Mainboard Temperatur,

    Und hier brauchst du die Temperaturen.
    Leider finde ich die Temperaturen nicht in der WMI
    Folgendes habe ich dazu gefunden
    "Prozessor"
    Spoiler anzeigen
    ListBox2.Items.Add("AddressWidth -> " & .AddressWidth)
    ListBox2.Items.Add("Architecture -> " & .Architecture)
    ListBox2.Items.Add("Availability -> " & .Availability)
    ListBox2.Items.Add("Caption -> " & .Caption)
    ListBox2.Items.Add("ConfigManagerErrorCode -> " & .ConfigManagerErrorCode)
    ListBox2.Items.Add("ConfigManagerUserConfig -> " & .ConfigManagerUserConfig)
    ListBox2.Items.Add("CpuStatus -> " & .CpuStatus)
    ListBox2.Items.Add("CreationClassName -> " & .CreationClassName)
    ListBox2.Items.Add("CurrentClockSpeed -> " & .CurrentClockSpeed)
    ListBox2.Items.Add("CurrentVoltage -> " & .CurrentVoltage)
    ListBox2.Items.Add("DataWidth -> " & .DataWidth)
    ListBox2.Items.Add("Description -> " & .Description)
    ListBox2.Items.Add("DeviceID -> " & .DeviceID)
    ListBox2.Items.Add("ErrorCleared -> " & .ErrorCleared)
    ListBox2.Items.Add("ErrorDescription -> " & .ErrorDescription)
    ListBox2.Items.Add("ExtClock -> " & .ExtClock)
    ListBox2.Items.Add("Family -> " & .Family)
    ListBox2.Items.Add("InstallDat -> " & .InstallDate)
    ListBox2.Items.Add("L2CacheSize -> " & .L2CacheSize)
    ListBox2.Items.Add("L2CacheSpeed -> " & .L2CacheSpeed)
    ListBox2.Items.Add("LastErrorCode -> " & .LastErrorCode)
    ListBox2.Items.Add("Level -> " & .Level)
    ListBox2.Items.Add("LoadPercentage -> " & .LoadPercentage)
    ListBox2.Items.Add("Manufacturer -> " & .Manufacturer)
    ListBox2.Items.Add("MaxClockSpeed -> " & .MaxClockSpeed)
    ListBox2.Items.Add("Name -> " & .Name)
    ListBox2.Items.Add("OtherFamilyDescription -> " & .OtherFamilyDescription)
    ListBox2.Items.Add("PNPDeviceID -> " & .PNPDeviceID)
    'ListBox2.Items.Add((Join(" -> " & .PowerManagementCapabilities, ", "))
    ListBox2.Items.Add("PowerManagementSupported -> " & .PowerManagementSupported)
    ListBox2.Items.Add("ProcessorId -> " & .ProcessorId)
    ListBox2.Items.Add("ProcessorType -> " & .ProcessorType)
    ListBox2.Items.Add("Revision -> " & .Revision)
    ListBox2.Items.Add("Role -> " & .Role)
    ListBox2.Items.Add("SocketDesignation -> " & .SocketDesignation)
    ListBox2.Items.Add("Status -> " & .Status)
    ListBox2.Items.Add("StatusInfo -> " & .StatusInfo)
    ListBox2.Items.Add("Stepping -> " & .Stepping)
    ListBox2.Items.Add("SystemCreationClassName -> " & .SystemCreationClassName)
    ListBox2.Items.Add("SystemName -> " & .SystemName)
    ListBox2.Items.Add("UniqueId -> " & .UniqueId)
    ListBox2.Items.Add("UpgradeMethod -> " & .UpgradeMethod)
    ListBox2.Items.Add("Version -> " & .Version)
    ListBox2.Items.Add("VoltageCaps -> " & .VoltageCaps)

    "Video Controller Resultion"
    Spoiler anzeigen
    ListBox2.Items.Add("Caption -> " & .Caption)
    ListBox2.Items.Add("Beschreibung -> " & .Description)
    ListBox2.Items.Add("Horizontal -> " & .HorizontalResolution)
    ListBox2.Items.Add("Max Refresh Rate -> " & .MaxRefreshRate)
    ListBox2.Items.Add("Min Refresh Rate -> " & .MinRefreshRate)
    ListBox2.Items.Add("Number Of Colors -> " & .NumberOfColors)
    ListBox2.Items.Add("Refresh Rate -> " & .RefreshRate)
    ListBox2.Items.Add("Scan Mode -> " & .ScanMode)
    ListBox2.Items.Add("Setting ID -> " & .SettingID)
    ListBox2.Items.Add("Vertical -> " & .VerticalResolution)

    "MainBoard"
    Spoiler anzeigen
    ListBox2.Items.Add("Availability -> " & .Availability)
    ListBox2.Items.Add("Caption -> " & .Caption)
    ListBox2.Items.Add("ConfigManagerErrorCode -> " & .ConfigManagerErrorCode)
    ListBox2.Items.Add("ConfigManagerUserConfig -> " & .ConfigManagerUserConfig)
    ListBox2.Items.Add("CreationClassName -> " & .CreationClassName)
    ListBox2.Items.Add("Description -> " & .Description)
    ListBox2.Items.Add("DeviceID -> " & .DeviceID)
    ListBox2.Items.Add("ErrorCleared -> " & .ErrorCleared)
    ListBox2.Items.Add("ErrorDescription -> " & .ErrorDescription)
    ListBox2.Items.Add("InstallDate -> " & .InstallDate)
    ListBox2.Items.Add("LastErrorCode -> " & .LastErrorCode)
    ListBox2.Items.Add("Name -> " & .Name)
    ListBox2.Items.Add("PNPDeviceID -> " & .PNPDeviceID)
    ListBox2.Items.Add("PowerManagementSupported -> " & .PowerManagementSupported)
    ListBox2.Items.Add("PrimaryBusType -> " & .PrimaryBusType)
    ListBox2.Items.Add("RevisionNumber -> " & .RevisionNumber)
    ListBox2.Items.Add("SecondaryBusType -> " & .SecondaryBusType)
    ListBox2.Items.Add("Status -> " & .Status)
    ListBox2.Items.Add("StatusInfo -> " & .StatusInfo)
    ListBox2.Items.Add("SystemCreationClassName -> " & .SystemCreationClassName)
    ListBox2.Items.Add("SystemName -> " & .SystemName)

    Sorry :thumbdown: da hatte ich anderes in Erinnerung. Leider sind die Temperaturen nicht mit dabei.

    Wenn ich noch etwas finde sag ich dir bescheid.

    Bernd

    ElBarto schrieb:

    Die Möglichkeit 2 sieht sehr vielversprechend aus.

    Eine solche Regelung ist im System implementiert, da musst Du Dich nicht drum kümmern.
    Du kannst ja mal den Unterschied feststellen, einmal mit dem PC nichts zu tun und zum anderen 17 Programme laufen zu lassen, die intensive Berechnungen ausführen.
    Einen Film abzuspielen bringt da nix, das macht die GPU (Prozessor der Grafikkarte).
    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!
    Keine Sorge ich kenne mich recht gut mit PCs aus aber was willst du mir jetzt damit sagen?

    Nicht das jetzt an dieser Stelle Missverständnisse auftreten. Ich will keine Regelung programmieren. Ich will mir jediglich alle oben genannten Daten in einem Programm anzeigen lassen, nicht mehr und nicht weniger. Werde jetzt mal anfangen diese 2. Möglichkeit ausprobieren, mal sehen ob das klappt und vielleicht ergeben sich daraus Möglichkeiten auch an die restlichen Daten zu kommen.
    An die CPU Temperatur komme ich jetzt auch :thumbsup:

    Allerdings gibte s noch ein Problem. Die CPU Temperatur wird nur einmal ausgelesen beim starten meines Programmes und ändert sich dann nicht mehr. Ich möchte aber, dass der aktuelle Wert angezeigt wird.

    OK. Hat sich auch erledigt. Hatte vergessen das ganze in den Timer zu schreiben. Jetzt läufts.

    Fehlen ja nur noch die Daten der anderen Hardware.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ElBarto“ ()

    Ich habe im Internet was gefunden um an die Daten für die Grafikkarte zu kommen.

    Es hat tatsächlich mal jemand ne dll für MSI Afterburner geschrieben, die mit VB kompatibel ist. Ist alles hier zu finden, zwar auf Englisch aber egal: Afterburner

    Die dll habe ich schon als Verweis hinzugefügt und importiert.

    Und nun brauche ich wieder eure Hilfe. Mit meinem Wissen konnte ich das noch nicht umsetzen.

    Im ersten Post findet man unter dem Link "View Online" eigentlich alles was man jetzt noch braucht. Ganz unten unter "MONITORING_SOURCE_ID Enumeration" stehen die 3 Datenquellen, die ich haben will:
    GPU_TEMPERATURE, GPU_USAGE und MEMORY_USAGE

    Wenn das wirklich das ist, was ich suche, dann wäre es sehr schön, wenn mir jemand kurz zeigen könnte wie man da jetzt mit VB hinkommt.
    CPU Temperatur -> dritter Post -> Möglichkeit 2. Nur das "Dim CTInfo As CoreTempInfo" musste ich ändern in "Public CTInfo As New CoreTempInfo" und fertig.

    Wie gesagt. An die Daten der Grafikkarte bin ich noch nicht gekommen, da bedarf es noch eurer Hilfe um mit VB an die Daten von MSI Afterbürner zu kommen.