Мониторинг заряда батареи с помощью Win32 API

Я пытаюсь написать небольшое приложение, которое отслеживает, сколько энергии осталось в батарее ноутбука, и я хотел бы знать, какую функцию Win32 я мог бы использовать для этого.


person Fábio    schedule 24.10.2008    source источник


Ответы (4)


Для Vista и выше вы можете использовать RegisterPowerSettingNotification.

Для более ранних функций см. Функции управления питанием в этом раздел страницы MSDN «Функции управления питанием: Windows Server 2003 и более ранние версии»

Вы можете увидеть пример кода метода Vista в codeproject.

person Brian R. Bondy    schedule 24.10.2008

Я рекомендую использовать Win32 GetSystemPowerStatus. Фрагмент кода:

int getBatteryLevel()
{
    SYSTEM_POWER_STATUS status;
    GetSystemPowerStatus(&status);
    return status.BatteryLifePercent;
}
person Bruno STEUX    schedule 03.04.2015

По следующей ссылке есть очень подробная статья, а также пример проекта (проверено работает на Win8.1): http://www.codeproject.com/Articles/15829/Vista-Goodies-in-C-Monitoring-the-Computer-s-Power

person pilau    schedule 25.09.2014

Вы можете прослушивать PBT_APMPOWERSTATUSCHANGE. Это событие запускается в следующих 3 сценариях.

  1. Срок службы батареи падает до менее чем 5 минут питания или
  2. Срок службы батареи падает ниже 10%,
  3. Срок службы батареи изменяется на 3%

Идеальный способ — вызвать GetSystemPowerStatus() при получении этого события, а не в постоянном опросе. Член BatteryLifePercent группы SYSTEM_POWER_STATUS будет отображать время автономной работы в процентах.

Для этого события вам нужно будет обработать WM_POWERBROADCAST сообщение. Для PBT_APMPOWERSTATUSCHANGE wParam будет PBT_APMPOWERSTATUSCHANGE

person Sahil Singh    schedule 09.02.2020