Détection de la connexion d’alimentation CA dans WinPE?
Question
J'essaie de déterminer si un ordinateur portable est connecté au secteur.
Le système d'exploitation sous lequel je suis est WinPE. Mon application est écrite en C ++ natif.
Les requêtes WMI utilisant Win32_Battery ne sont pas prises en charge et l'API GetSystemPowerStatus renvoie toujours "1" pour ACLineStatus (s'exécutant sur un courant alternatif ou non).
Des idées?
Enquête complémentaire: Je viens d'essayer l'API 'CallNtPowerInformation' avec POWER_INFORMATION_LEVEL :: SystemBatteryState. L'élément de structure SYSTEM_BATTERY_STATUS AcOnLine renvoie également 1 quel que soit l'état de l'alimentation. Probablement juste appelle le même code de niveau système mais je pensais l’ajouter ici.
La solution
J'ai réussi à répondre à ma propre question et cela s'est avéré très simple au final.
Dans WinPE, le script noddy suivant renvoyait la valeur null lorsqu'il était exécuté, car la batterie n'était pas reconnue:
strComputer = ". " Définissez objWMIService = GetObject ("Winmgmts: \ & amp; strComputer & amp;" \ root \ CIMV2 ") Définir colItems = objWMIService.ExecQuery ("SELECT * FROM Win32_Battery", 48) Pour chaque objet en colItems Wscript.Echo objItem.BatteryStatus Wscript.Echo objItem.Caption Suivant
J'ai trouvé un pilote de périphérique de batterie dans mon image PE (\ windows \ inf \ battery.inf) qui, une fois installé, entraînait la reconnaissance de la batterie et le script ci-dessus renvoyant les valeurs attendues. BatteryStatus = 2 (le système a accès au secteur afin qu'aucune batterie ne soit déchargée) ou BatteryStatus = 1 (la batterie se décharge, c'est-à-dire que le secteur n'est pas connecté).
Le pilote peut être installé dans l'image PE elle-même ou chargé à la demande. c'est-à-dire drvload