Как получить уведомление об уровне заряда батареи от ядра Windows?

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

BOOL WINAPI GetSystemPowerStatus(
    __out  LPSYSTEM_POWER_STATUS lpSystemPowerStatus
    );

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

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

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


person user1386966    schedule 10.05.2012    source источник
comment
С каких это пор Windows позволяет программировать ядро?   -  person Shahbaz    schedule 10.05.2012
comment
@Shahbaz В Windows программирование ядра — это, по сути, написание драйвера. Но вас, вероятно, смущает разница между ядром и режим ядра. Windows экспортирует функции ядра, которые не имеют ничего общего с работой в режиме ядра.   -  person Cody Gray    schedule 10.05.2012
comment
Откуда вы взяли, что это должно включать что-нибудь ядро? Что плохого в том, чтобы позвонить GetSystemPowerStatus? Вы имеете в виду, что хотите, чтобы операционная система обратно вызывала ваш код, когда уровень мощности достигает определенных заранее определенных точек?   -  person Cody Gray    schedule 10.05.2012
comment
да - точно.. извините за путаные слова, я новичок в этом еще   -  person user1386966    schedule 10.05.2012
comment
Довольно распространено мнение, что ядро ​​состоит из суперкрутых и всемогущих методов. И единственная цель самого ядра — держать эти методы вне досягаемости смертных.   -  person Agent_L    schedule 10.05.2012
comment
@user1386966 user1386966 Что плохого в использовании WM_TIMER для вызова GetSystemPowerStatus через равные промежутки времени?   -  person Agent_L    schedule 10.05.2012
comment
@Agent Постоянный опрос вряд ли когда-либо является правильным способом решения проблемы. Это сработало бы для расплывчатых определений термина «работа». Но я бы не стал разрабатывать приложение вокруг этого.   -  person Cody Gray    schedule 10.05.2012
comment
@CodyGray действительно, особенно мониторинг батареи путем ее разрядки контрпродуктивен. Но редко переменные внешнего мира имеют хуки OnThresholdReached.   -  person Agent_L    schedule 10.05.2012
comment
Я не хочу использовать таймеры, я думаю, что функция обратного вызова лучше, но API, предложенный @Cody Gray, работает только с настольными приложениями, и мне нужно, чтобы он также мог работать с драйвером   -  person user1386966    schedule 10.05.2012
comment
@ user1386966 Драйвер ?? Какой драйвер?   -  person Lundin    schedule 10.05.2012


Ответы (2)



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

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

и т.п.

person Steve Townsend    schedule 10.05.2012