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

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

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

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

Есть идеи?

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

1 Ответ

1 голос
/ 10 июля 2009

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

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

strComputer = "." Установите objWMIService = GetObject ("winmgmts: \" & strComputer & "\ root \ CIMV2") Установить colItems = objWMIService.ExecQuery ("ВЫБРАТЬ * ИЗ Win32_Battery" ,, 48) Для каждого объекта в колледжах Wscript.Echo objItem.BatteryStatus Wscript.Echo objItem.Caption Далее

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

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

...