Обнаружение подключения к сети переменного тока в WinPE?
Вопрос
Я пытаюсь определить, подключен ли ноутбук к сети переменного тока. Р>
ОС, под которой я работаю, - это 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