Rilevamento della connessione di alimentazione CA in WinPE?
Domanda
Sto cercando di determinare se un laptop è collegato all'alimentazione CA.
Il SO in esecuzione sotto è WinPE. La mia app è scritta in C ++ nativo.
Le query WMI che utilizzano Win32_Battery non sono supportate e l'API GetSystemPowerStatus restituisce sempre '1' per ACLineStatus (funzionante con alimentazione CA o meno).
Qualche idea?
Indagine aggiuntiva: Ho appena provato l'API "CallNtPowerInformation" con POWER_INFORMATION_LEVEL :: SystemBatteryState. Anche l'elemento struttura SYSTEM_BATTERY_STATUS AcOnLine restituisce 1 indipendentemente dallo stato dell'alimentazione. Probabilmente chiama solo lo stesso codice a livello di sistema ma ho pensato di aggiungerlo qui.
Soluzione
Sono riuscito a rispondere alla mia domanda e alla fine si è rivelato molto semplice.
In WinPE il seguente noddy script ha restituito null quando eseguito perché la batteria non veniva riconosciuta:
strComputer = ". " Imposta objWMIService = GetObject (" winmgmts: \ " & amp; strComputer & amp; " \ root \ CIMV2 ") Imposta colItems = objWMIService.ExecQuery (" SELECT * FROM Win32_Battery " ,, 48) Per ogni oggetto in colonne Wscript.Echo objItem.BatteryStatus Wscript.Echo objItem.Caption Avanti
Ho trovato un driver del dispositivo batteria nella mia immagine PE (\ windows \ inf \ battery.inf) che una volta installato ha comportato il riconoscimento della batteria e lo script sopra restituito i valori previsti. cioè BatteryStatus = 2 (il sistema ha accesso alla corrente alternata, quindi nessuna batteria viene scaricata) o BatteryStatus = 1 (la batteria si sta scaricando, cioè CA non è collegata).
Il driver può essere installato nell'immagine PE stessa o caricato su richiesta. cioè drvload