Класс WIM CIM_Battery не имеет экземпляров

316
ifconfig

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

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

Screenshot of CIM_Battery Class

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

0
Итак, у вашего компьютера есть батарея? Ultrasonic54321 6 лет назад 0
@ Ultrasonic54321 Да, это так. ifconfig 6 лет назад 0

1 ответ на вопрос

1
Narzard

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

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 (System.Management.Automation). Таким образом, вы можете сделать .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родительского класса, win32_batteryвместо этого вытащите из класса.

Это действительно единственный способ сделать это? Это только кажется ... нечистым. ifconfig 6 лет назад 0
есть также команда powershell `(Get-WmiObject win32_battery) .estimatedChargeRemaining` и возвращает оставшийся процент. Может быть проще? В .net есть класс powershell, так что вы можете получить вывод довольно легко. Narzard 6 лет назад 0
Разве вызов PowerShell для WMI ничего не даст, потому что экземпляров нет? ifconfig 6 лет назад 0
Откройте окно powershell, вставьте команду и посмотрите, получите ли вы результат Narzard 6 лет назад 1
Да, команда PS работает. О, я думаю, я понял это: вещи CIM_ [WHATEVER] просто классы, а остальные являются экземплярами? Позвольте мне попробовать класс `win32_battery`. ifconfig 6 лет назад 0
БЛАГОДАРЮ ВАС! Я приму ваш ответ, если вы включите то, что я сказал в моем предыдущем комментарии: класс `CIM_Battery` является просто шаблоном для класса` win32_battery`, который реализует `CIM_Battery`. Вот почему у `CIM_Battery` нет экземпляров, у` win32_battery`. ifconfig 6 лет назад 0
@ifconfig добавил больше информации во втором редактировании. Рад, что вы поняли это! Narzard 6 лет назад 1