Я пытаюсь создать приложение C #, которое записывает процент заряда батареи с течением времени, и для этого я пытаюсь использовать .NET WMI API. Я посмотрел на MSDN и обнаружил, что существует класс WMI под названием CIM_Battery, и подтвердил его существование с помощью wbemtest.exe.

При ближайшем рассмотрении в wbemtest.exe выясняется, что у класса CIM_Battery нет экземпляров, из которых я могу читать.

Снимок экрана класса CIM_Battery

Это нормально или моя система просто сломана?

1 ответ1

1

Не уверен, почему это не работает, но другой способ сделать это:

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();

Это выведет время автономной работы в файл: C:/Windows/System32/battery-report.html

Затем вы можете очистить эту страницу. Это немного излишне, но там может быть больше данных, которые вы можете использовать для диагностики.

Изменить: также класс powershell в .net (Система.Управление.Автоматизация) сборка. Таким образом, вы можете сделать .ps1 со строкой: (Get-WmiObject win32_battery).estimatedChargeRemaining

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

Edit2: классы CIM (общая информационная модель) являются родительскими классами, на которых построены классы WMI. win32_xxx отслеживают и управляют системным оборудованием и функциями и находятся в CIM. Вместо того, чтобы CIM_Battery из родительского класса CIM_Battery, вместо этого извлекайте из класса win32_battery .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .