2012-05-10 3 views
0

Мне нужно написать код на C, который будет указывать и уведомлять меня, когда мощность аккумулятора ноутбука низкая. Я знаю, что я могу использовать следующее:Как получить уведомление об уровне мощности аккумулятора в ядре Windows?

BOOL WINAPI GetSystemPowerStatus(
    __out LPSYSTEM_POWER_STATUS lpSystemPowerStatus 
    ); 

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

Я хочу, чтобы в моем коде была «пустая» петля, и когда батарея разряжена, код отправит мне уведомление (printf или trace).

Я думаю, что я должен использовать функции ядра, но я не могу найти их

+1

С каких пор Windows разрешает программирование ядра? – Shahbaz

+3

@Shahbaz В Windows «программирование ядра» в основном «пишут драйвер». Но то, что вас пугает, - это [разница между режимом ядра и ядра] (http://blogs.msdn.com/b/oldnewthing/archive/2012/04/17/10294294.aspx). Windows выполняет экспорт функций «ядро», которые не имеют никакого отношения к работе в режиме ядра. –

+1

Откуда у вас возникла идея, что это должно включать в себя ядро ​​* что угодно? Что случилось с вызовом 'GetSystemPowerStatus'? Вы имеете в виду, что вы действительно хотите, чтобы операционная система * перезвонила * ваш код, когда уровень мощности достигает определенных заранее определенных точек? –

ответ

4

Я никогда не использовал эти API-интерфейсы, но то, что вы ищете, кажется WM_POWERBROADCAST.

Существуют различные значения для wParam, которые вы можете проверить при получении этого сообщения, например PBT_APMBATTERYLOW. Когда вы получите сообщение WM_POWERBROADCAST с соответствующим значением wParam, звоните GetSystemPowerStatus() оттуда.

+0

спасибо, но проблема в том, что этот API работает только с настольными приложениями. – user1386966

+2

@ user1386966 Да? Где в вашем вопросе вы упоминаете что-нибудь еще? У вас есть какое-то молчаливое, секретное требование, о котором вы нам не говорите? – Lundin

1

В ядре существует отдельная методология для обработки обновлений состояния питания. См. here для информации.

Если вы пишете драйвер, который может подвергнуться мощности государственных изменений, вы должны быть в состоянии обрабатывать следующие типы информации в коде драйвера:

и т.д.