A classe WMI CIM_Battery não tem instâncias

0

Estou tentando criar um aplicativo c # que registre a porcentagem da bateria ao longo do tempo e, para isso, estou tentando usar a API do .NET WMI. Eu olhei no MSDN e descobri que há uma classe WMI chamada CIM_Battery e confirmou sua existência com wbemtest.exe .

Após uma inspeção mais detalhada em wbemtest.exe , parece que a classe CIM_Battery não tem nenhuma instância da qual eu possa ler.

Isso é normal ou meu sistema está quebrado?

    
por ifconfig 23.03.2018 / 23:26

1 resposta

1

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 .

    
por 24.03.2018 / 06:38