Não sei por que isso não está funcionando, mas outra maneira de fazer isso:
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();
Isso gerará a duração da bateria em um arquivo: C:/Windows/System32/battery-report.html
Você pode então raspar a página. É um pouco exagerado, mas pode haver mais dados lá que você possa usar para o seu diagnóstico.
Editar: também uma classe powershell
na montagem .net (System.Management.Automation). Então você poderia fazer um .ps1 com a linha:
(Get-WmiObject win32_battery).estimatedChargeRemaining
PowerShell psinstance = PowerShell.Create();
psinstance.AddScript(scriptPath);
var results = psinstance.Invoke();
Edit2: As classes CIM (common information model) são classes pai nas quais as classes WMI são criadas. win32_xxx
classes monitoram e gerenciam hardware e recursos do sistema e estão localizados no CIM. Em vez de extrair da classe pai CIM_Battery
, use a classe win32_battery
.