CIM_Battery WMI-Klasse hat keine Instanzen

364
ifconfig

Ich versuche, eine C # -Anwendung zu erstellen, die den Prozentsatz der Batterie im Laufe der Zeit aufzeichnet, und dazu habe ich versucht, die .NET-WMI-API zu verwenden. Ich schaute auf MSDN und stellte fest, dass es eine WMI-Klasse gibt CIM_Battery, und bestätigte ihre Existenz mit wbemtest.exe.

Bei näherer Betrachtung wbemtest.exescheint die CIM_BatteryKlasse keine Instanzen zu haben, aus denen ich lesen kann.

Screenshot of CIM_Battery Class

Ist das normal oder ist mein System gerade kaputt?

0
Ihr Computer hat also einen Akku? Ultrasonic54321 vor 6 Jahren 0
@ Ultrasonic54321 Ja, das stimmt. ifconfig vor 6 Jahren 0

1 Antwort auf die Frage

1
Narzard

Nicht sicher, warum das nicht funktioniert, aber eine andere Möglichkeit, dies zu tun:

System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "/C powercfg /batteryreport"; process.StartInfo = startInfo; process.Start(); 

Dadurch wird die Akkulaufzeit in eine Datei ausgegeben: C:/Windows/System32/battery-report.html

Sie können diese Seite dann kratzen. Es ist ein bisschen übertrieben, aber es könnten mehr Daten vorhanden sein, die Sie für Ihre Diagnose verwenden können.

Bearbeiten Sie auch eine powershellKlasse in der .net-Assembly (System.Management.Automation). Sie könnten also eine .ps1 mit der Zeile machen: (Get-WmiObject win32_battery).estimatedChargeRemaining

PowerShell psinstance = PowerShell.Create(); psinstance.AddScript(scriptPath); var results = psinstance.Invoke(); 

Edit2: Die CIM-Klassen (Common Information Model) sind übergeordnete Klassen, auf denen die WMI-Klassen basieren. win32_xxxKlassen überwachen und verwalten Systemhardware und -funktionen und befinden sich im CIM. Anstatt aus der CIM_Batteryübergeordneten Klasse zu ziehen, ziehen Sie win32_batterystattdessen aus der Klasse.

Ist dies wirklich die einzige Möglichkeit, dies zu tun? Es scheint nur ... unrein zu sein. ifconfig vor 6 Jahren 0
Es gibt auch den Powershell-Befehl `(Get-WmiObject win32_battery) .estimatedChargeRemaining` und gibt den verbleibenden Prozentsatz zurück. Könnte einfacher sein Es gibt eine Powershell-Klasse in .net, so dass Sie die Ausgabe ziemlich einfach probieren können Narzard vor 6 Jahren 0
Würde der PowerShell-Aufruf an WMI nicht nichts zurückgeben, da keine Instanzen vorhanden sind? ifconfig vor 6 Jahren 0
Öffnen Sie ein Powershell-Fenster, fügen Sie den Befehl ein und prüfen Sie, ob Sie ein Ergebnis erhalten Narzard vor 6 Jahren 1
Ja, der PS-Befehl funktioniert. Oh, ich glaube, ich habe es herausgefunden: Sind die "CIM_ [WHATEVER]" Dinge nur die Klassen und die anderen sind die Instanzen? Lassen Sie mich die Klasse `win32_battery` ausprobieren. ifconfig vor 6 Jahren 0
DANKE DIR! Ich werde Ihre Antwort akzeptieren, wenn Sie das, was ich in meinem vorherigen Kommentar gesagt habe, mit einschließen: Die `CIM_Battery`-Klasse ist nur eine Vorlage für die` win32_battery`-Klasse, die `CIM_Battery` implementiert. Aus diesem Grund hat `CIM_Battery` keine Instanzen,` win32_battery`. ifconfig vor 6 Jahren 0
@ifconfig fügte der 2. Bearbeitung weitere Informationen hinzu. Ich bin froh, dass du es herausgefunden hast! Narzard vor 6 Jahren 1