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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top