Blog. Just Blog

Как узнать заряд батареи ноутбука

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Как узнать заряд батареи ноутбука
Как узнать заряд батареи ноутбука

Если вы разрабатываете программы, предназначенные для ноутбуков, в них надо учитывать один важный момент - состояние питания и статус батареи. Например, при низком уровне заряда батареи лучше предупредить пользователя о несохраненных данных, или попробовать приостановить какие-нибудь ресурсоемкие операции до подключения ноутбука к сети. Как обычно, я буду использовать мой любимый Ассемблер.

Текущее состояние системы питания компьютера и оставшийся заряд батареи определяется одной функцией - GetSystemPowerStatus. Структура SYSTEM_POWER_STATUS, используемая в ней, в FASM не определена, сделаем это самостоятельно:
  1. struct SYSTEM_POWER_STATUS
  2.     ACLineStatus        db ?
  3.     BatteryFlag         db ?
  4.     BatteryLifePercent  db ?
  5.     SystemStatusFlag    db ?
  6.     BatteryLifeTime     dw ?
  7.     BatteryFullLifeTime dw ?
  8. ends
Дальше все просто. Вызываем GetSystemPowerStatus и анализируем полученные данные. ACLineStatus определяет статус подключения к сети: 1 - компьютер подключен к розетке, 0 - автономная работа от батареи или ИБП. В каких-то исключительных случаях значение может получиться 255, то есть статус определить невозможно, но я такое ни на одном компьютере не встречал. BatteryFlag - это поле является комбинацией флагов. Общее состояние батареи: 1 - высокий уровень заряда (более 66%), 2 - низкий уровень заряда (менее 33%), 4 - критический уровень заряда (менее 5%), ни один из трех младших битов не установлен - средний уровень заряда в диапазоне от 33% до 66% включительно. Статус зарядки: 8 - батарея заряжается. Фиксированные значения: 128 - батарея не установлена или программа запущена на стационарном компьютере, 255 - данные получить не удалось. BatteryLifePercent - проценты оставшегося заряда батареи от 0 до 100 или фиксированное значение 255, если данные получить не удалось, например, в случае работы на стационарном компьютере. Поля BatteryLifeTime и BatteryFullLifeTime по задумке должны возвращать оставшееся время работы и время работы от полностью заряженной батареи. Но на практике эти поля запросто могут оказаться не заполнены, так что без дополнительной калибровки ориентироваться на них не стоит. Как видите, ничего сложного.

В приложении пример программы с исходным текстом, определяющей текущее состояние питания компьютера.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Power.Status.Demo.zip (1,930 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 3430 | Комментариев: 3

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Владислав (07.04.2017 в 14:36):
а,... тогда прошу прощения)
ManHunter (07.04.2017 в 13:59):
А кто сказал, что "Battery Life" - это уровень старения батареи? Это оставшийся заряд аккумулятора в процентах, ничего более.
Владислав (07.04.2017 в 13:26):
Battarey Life выдает неверное значение, на него полагаться нельзя, у меня батарея около 40-50 % (Lenovo офиц. тулза выдает), а тут говорит что 100%...
остальные параметры вроде верны.
Видимо, Windows не в состоянии верно оценить уровень старения батареи..

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0045 сек.) / Память: 4.5 Mb
Наверх