Обнаружение подключения к сети переменного тока в WinPE?

StackOverflow https://stackoverflow.com/questions/1001719

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь определить, подключен ли ноутбук к сети переменного тока.

ОС, под которой я работаю, - это WinPE. Мое приложение написано на родном C ++.

Запросы WMI, использующие Win32_Battery, не поддерживаются, и API GetSystemPowerStatus всегда возвращает '1' для ACLineStatus (работает от сети или нет).

Есть идеи?

Дополнительное расследование: Только что попробовал API CallNtPowerInformation с POWER_INFORMATION_LEVEL :: SystemBatteryState. Элемент структуры SYSTEM_BATTERY_STATUS AcOnLine также возвращает 1 независимо от состояния источника питания. Возможно, просто вызывает тот же код системного уровня, но подумал, что я добавлю его сюда.

Это было полезно?

Решение

Мне удалось ответить на мой собственный вопрос, и в итоге он оказался очень простым.

В WinPE следующий скрипт noddy возвратил ноль при выполнении, потому что батарея не была распознана:

strComputer = ". " Установите objWMIService = GetObject (" winmgmts: \ " & amp; strComputer & amp; " \ root \ CIMV2 ") Установите colItems = objWMIService.ExecQuery (" SELECT * FROM Win32_Battery " ,, 48) Для каждого объекта в колледжах     Wscript.Echo objItem.BatteryStatus     Wscript.Echo objItem.Caption Далее

Я обнаружил драйвер устройства батареи в своем образе PE (\ windows \ inf \ battery.inf), который после установки привел к распознаванию батареи и приведенному выше сценарию, возвращающему ожидаемые значения. то есть BatteryStatus = 2 (система имеет доступ к сети переменного тока, поэтому батарея не разряжается) или BatteryStatus = 1 (батарея разряжается, то есть переменная сеть не подключена).

Драйвер может быть установлен в самом образе PE или загружен по требованию. т.е. drvload

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top