Я пытаюсь написать небольшое приложение, которое отслеживает, сколько энергии осталось в батарее ноутбука, и я хотел бы знать, какую функцию Win32 я мог бы использовать для этого.
Мониторинг заряда батареи с помощью Win32 API
Ответы (4)
Для Vista и выше вы можете использовать RegisterPowerSettingNotification.
Для более ранних функций см. Функции управления питанием в этом раздел страницы MSDN «Функции управления питанием: Windows Server 2003 и более ранние версии»
Вы можете увидеть пример кода метода Vista в codeproject.
Я рекомендую использовать Win32 GetSystemPowerStatus. Фрагмент кода:
int getBatteryLevel()
{
SYSTEM_POWER_STATUS status;
GetSystemPowerStatus(&status);
return status.BatteryLifePercent;
}
По следующей ссылке есть очень подробная статья, а также пример проекта (проверено работает на Win8.1): http://www.codeproject.com/Articles/15829/Vista-Goodies-in-C-Monitoring-the-Computer-s-Power
Вы можете прослушивать PBT_APMPOWERSTATUSCHANGE
. Это событие запускается в следующих 3 сценариях.
- Срок службы батареи падает до менее чем 5 минут питания или
- Срок службы батареи падает ниже 10%,
- Срок службы батареи изменяется на 3%
Идеальный способ — вызвать GetSystemPowerStatus() при получении этого события, а не в постоянном опросе. Член BatteryLifePercent
группы SYSTEM_POWER_STATUS
будет отображать время автономной работы в процентах.
Для этого события вам нужно будет обработать WM_POWERBROADCAST
сообщение. Для PBT_APMPOWERSTATUSCHANGE
wParam будет PBT_APMPOWERSTATUSCHANGE