Поделиться через


Сведения об батарее

Батареи могут обеспечить питание для портативных компьютеров и компьютеров, работающих на источнике бесперебойного питания (ИП). На этих компьютерах операционная система предоставляет сведения о состоянии батареи, чтобы приложения могли предоставлять пользователю полезные функции. (Некоторые старые нестандартные аккумуляторные системы и ИП не поддерживаются.)

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

Чтобы получить сведения о состоянии батареи, используйте функцию GetSystemPowerStatus , которая возвращает общие сведения обо всех источниках питания в системе. По возможности следует использовать GetSystemPowerStatus .

Однако в некоторых случаях требуется подробная информация о каждом отдельном аккумуляторе. Для этого каждое устройство батареи предоставляет интерфейс IOCTL. Следующие операции IOCTL выполняются с помощью функции DeviceIoControl :

IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION

Чтобы использовать этот интерфейс, приложение должно выполнить несколько шагов. Во-первых, он должен использовать процедуры настройки для перечисления всех устройств с интерфейсом класса батареи. Обратите внимание, что эти устройства представляют порты батареи, а не фактические батареи, присутствующие в системе. Затем приложение должно открыть дескриптор для каждого устройства, чтобы использовать функцию DeviceIoControl для отправки запросов на устройство, а затем получить теги для всех вставляемых батарей. После выполнения этих действий приложение может отправлять запросы каждому устройству батареи.

Теги батареи

Так как каждое устройство батареи представляет собой слот, в который можно вставить аккумулятор, должен быть способ определить, когда аккумулятор извлекается и повторно вставлен, заменен или изменен каким-либо другим способом. Для этого каждому аккумулятору в определенном слоте назначается тег . Этот тег должен использоваться для всех запросов к информации. Если тег, предоставленный приложением, не соответствует батарее, запрос завершается ошибкой, указывая приложению, что батарея каким-то образом изменилась. Для успешного выполнения запроса требуется новый тег батареи. Получение тега с помощью операции IOCTL_BATTERY_QUERY_TAG . Если в этом слоте присутствует аккумулятор, возвращаемый тег можно передать в любой из других ioCTL батареи для выполнения других функций. В системе с несколькими батареями каждое устройство батареи (слот) выдает теги батареи независимо друг от друга, поэтому тег с двух отдельных устройств иногда может быть идентичным.

Изменение тега батареи не обязательно означает, что батарея была удалена, повторно вставлена или заменена. При изменении любого из данных, которые обычно являются статическими, можно создать новый тег. Например, после завершения зарядки батареи может измениться последняя полностью заряженная емкость. Тег также может измениться, если связь с батареей была временно потеряна или если было неправильное уведомление от BIOS. В некоторых системах тег батареи может обновляться при изменении состояния переменного тока. Это поведение связано с характеристикой системы батареи и не является распространенным.

При каждом обновлении тега батареи батарея должна рассматриваться как новая батарея, и все кэшированные данные должны считываться повторно. Если приложению необходимо знать, присутствует ли тот же физический аккумулятор, оно должно проверка значение BatteryUniqueID в выходном буфере IOCTL_BATTERY_QUERY_INFORMATION при вызове с уровнем сведений BatteryUniqueID.

Сведения об управлении питанием

Перечисление устройств батареи