Pregunta

Estoy tratando de determinar si una computadora portátil está conectada a la alimentación de CA.

El SO Im que se ejecuta bajo es WinPE. Mi aplicación está escrita en C ++ nativo.

Las consultas WMI que utilizan Win32_Battery no son compatibles y la API GetSystemPowerStatus siempre devuelve '1' para ACLineStatus (ejecutándose con alimentación de CA o no).

¿Alguna idea?

Investigación adicional: Acabo de probar la API 'CallNtPowerInformation' con POWER_INFORMATION_LEVEL :: SystemBatteryState. El elemento de estructura SYSTEM_BATTERY_STATUS AcOnLine también devuelve 1 independientemente del estado de la fuente de alimentación. Probablemente solo llame al mismo código de nivel del sistema, pero pensé que lo agregaría aquí.

¿Fue útil?

Solución

Logré responder mi propia pregunta y resultó ser muy simple al final.

En WinPE, la siguiente secuencia de comandos noddy devuelve nulo cuando se ejecuta porque no se reconoce la batería:

strComputer = ". " Establecer objWMIService = GetObject (" winmgmts: \ " & amp; strComputer & amp; " \ root \ CIMV2 ") Establezca colItems = objWMIService.ExecQuery (" SELECT * FROM Win32_Battery " ,, 48) Para cada objeto en columnas     Wscript.Echo objItem.BatteryStatus     Wscript.Echo objItem.Caption Siguiente

Encontré un controlador de dispositivo de batería en mi imagen PE (\ windows \ inf \ battery.inf) que una vez instalado resultó en el reconocimiento de la batería y el script anterior devolvió los valores esperados. es decir, BatteryStatus = 2 (el sistema tiene acceso a CA, por lo que no se está descargando la batería) o BatteryStatus = 1 (la batería se está descargando, es decir, AC no está conectada).

El controlador se puede instalar en la propia imagen PE o cargar bajo demanda. es decir, drvload

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top