Laden...

CPU Status auslesen (Taktrate, Temperatur, Auslastung)

Erstellt von Robin0 vor 10 Jahren Letzter Beitrag vor 10 Jahren 9.206 Views
R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren
CPU Status auslesen (Taktrate, Temperatur, Auslastung)

Hallo,

Ich suche einen weg um die Statusinformationen des prozessors auszulesen(für
unterschiedliche prozessoren oder für AMD is mir beised recht).

unter statusinformationen verstehe ich:
-Aktuelle taktrate. Nicht die maximale sondern die aktuelle.(Ich weiß das ich den wert erst mit dem aktuell vervendetem multiplikator umrechnen muss desshalb brauche ich eig nur den Grundtakt und den multiplikator).
-Die aktuelle temperatur.
-und die auslastung pro logisch verwaltetem Kern.

Suche jetz schon einige zeit zwischendurch mal im internet danach und find nur sachen die nich funktionieren.

!!System.Management.ManagementObjectSearcher!! gibt es nicht [EDIT]Gibt es doch sihe unten[/EDIT]

Weiß villeicht jemand eine dll über die das geht kann auch ne c/c++/vb dll sein

M
334 Beiträge seit 2007
vor 10 Jahren

Hallo, mein Name ist Ich hab mal schnell gegoogelt.

ManagementObjectSearcher Class gibts seit .NET 1.1

Wo ist das Problem?

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Also das problem dabei besteht, versuch einfach mal bei die klasse bei Visual studio zu deklariren, oder schau dir im ObjektBrowser mal die System.management klasse an dann siehst du das es kein System.Management.ManagementObjectSearcher gibt.

Oder ich bin zu dumm um richtig strg+C-strg+V zu drücken und suce immer in der falschen klasse.

P
660 Beiträge seit 2008
vor 10 Jahren

um dir jetzt nicht zu nahe treten zu wollen, aber die msdn liefert dir ein beispiel wie man die klasse verwendet. der rest ist dann eigenrecherche.

ManagementObjectSearcher Constructor (ObjectQuery)

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

M
334 Beiträge seit 2007
vor 10 Jahren

Assembly: System.Management (in System.Management.dll)

Du musst die Assembly schon referenzieren. Das sind aber Grundlagen.

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Ich muss mich korregieren, es gibt verschidene System.Management... man sollte auch die richtige einbinden, naja, habs jetz gefunden.

Die richtige ist zu finden unter:
Verweiß hinzufügen -->
Framework->Assemblys->System.Management 4.0.0.0
Die aus System.Core ist die falsche.

Nochmal danke an alle.
bin schon 2Wochen am suchen warum das nicht funtzt XD, die einfachsten lösungen sind die besten.

12 Beiträge seit 2013
vor 10 Jahren

Noch eine kleine Ergänzung
Eine einfache Klasse dafür gibt es hier:
C# - Systeminformationen aus der Registry lesen

c#-Hacker

Hinweis von herbivore vor 10 Jahren

Das Referenzieren von Assembies gehört tatsächlich zu den Grundlagen. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Also ich versuche echt ein Temperatur wert zu bekommen, nur Find ich den nicht

Das einzige was ich zum prozessor finde ist:


instance of Win32_Processor
{
	AddressWidth = 64;
	Architecture = 9;
	Availability = 3;
	Caption = "AMD64 Family 21 Model 1 Stepping 2";
	CpuStatus = 1;
	CreationClassName = "Win32_Processor";
	CurrentClockSpeed = 3300;
	CurrentVoltage = 12;
	DataWidth = 64;
	Description = "AMD64 Family 21 Model 1 Stepping 2";
	DeviceID = "CPU0";
	ExtClock = 200;
	Family = 63;
	L2CacheSize = 6144;
	L3CacheSize = 8192;
	L3CacheSpeed = 0;
	Level = 21;
	LoadPercentage = 1;
	Manufacturer = "AuthenticAMD";
	MaxClockSpeed = 3300;
	Name = "AMD FX(tm)-6100 Six-Core Processor             ";
	NumberOfCores = 3;
	NumberOfLogicalProcessors = 6;
	PowerManagementSupported = FALSE;
	ProcessorId = "178BFBFF00600F12";
	ProcessorType = 3;
	Revision = 258;
	Role = "CPU";
	SecondLevelAddressTranslationExtensions = TRUE;
	SocketDesignation = "AM3R2";
	Status = "OK";
	StatusInfo = 3;
	Stepping = "2";
	SystemCreationClassName = "Win32_ComputerSystem";
	SystemName = "ROBIN-PC";
	UpgradeMethod = 27;
	Version = "Modell 1, Stepping 2";
	VirtualizationFirmwareEnabled = FALSE;
	VMMonitorModeExtensions = TRUE;
};

Auszug aus MOF von Win32_processor.DeviceID="CPU0"

Mit:
wbemtest.exe
kann man sich die daten anschauen ohne etwas in C# programieren zu müssen.

Ich finde einfach nicht die CPU auslastung geschweige denn die Temperatur

R
100 Beiträge seit 2009
vor 10 Jahren

@Robin0: Die Temperature von CPU kannst du nur auslesen wenn MainBoard/CPU den Wert unterstützt.

Versuch mal mit dem Code unten (erzeugt von WMI Code Creator)


using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\WMI", 
                    "SELECT * FROM MSAcpi_ThermalZoneTemperature"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("MSAcpi_ThermalZoneTemperature instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("CurrentTemperature: {0}", queryObj["CurrentTemperature"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Als fehler meldung bekomme ich "wird nicht unterstützt", aber es muss ja eine möglichkeit geben die Temperatur auszulesen.

P
660 Beiträge seit 2008
vor 10 Jahren

"wird nicht unterstützt"

Die Temperature von CPU kannst du nur auslesen wenn MainBoard/CPU den Wert unterstützt.

...

aber es muss ja eine möglichkeit geben die Temperatur auszulesen.

wenn du dennoch den wert trotzdem wissen willst nimm dir ein Thermometer in die Hand und fang an
an der CPU zu messen. nur drauf achten keine kurzschlüsse zu verursachen.

Ok jetzt mal im ernst. Was du machen kannst, ist dir eine neues Board zu kaufen, oder dir einen
Rechner suchen bei dem das möglich ist (Laptop vllt? Rechner deines Nachbarn, Freundes, ...) und
dort testen.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"