¿Detectando conexión de alimentación de CA en WinPE?
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í.
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