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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top