Уровень заряда батареи С#

У меня есть метод определения уровня заряда батареи и таймер для периодической проверки уровня заряда батареи.

   void GetBatteryLevel()
    {
        try
        {
            //Use this code in next build
            //System.Windows.Forms.PowerStatus status = System.Windows.Forms.SystemInformation.PowerStatus;

            double batteryLevel;
            ManagementObjectSearcher mos = new ManagementObjectSearcher("select EstimatedChargeRemaining from Win32_Battery");
            ManagementObjectCollection collection = mos.Get();
            foreach (ManagementObject mo in collection)
            {
                UInt16 remainingPercent = (UInt16)mo["EstimatedChargeRemaining"];
                batteryLevel            = (double)remainingPercent;
                batteryLevel            = batteryLevel / 100;
                batteryLevel            = 1.0 - batteryLevel;
                BatteryLevel            = new System.Windows.Point(0.0, batteryLevel);
            }
        }
        catch (Exception exp)
        {
            Logger.LogMessage("EXCEPTION: " + exp.StackTrace);
        }
    }

Есть ли способ регистрации событий, когда уровень заряда батареи падает или увеличивается на 1%? Я уже зарегистрировался в SystemEvents.PowerModeChanged, и это прекрасно работает.


person Aster Veigas    schedule 18.09.2013    source источник
comment
Вы можете обмануть и использовать элемент управления, который никогда не добавляется в форму, т.е. иметь флажок, где вы можете изменить его проверенное значение. Я не уверен в другом   -  person Sayse    schedule 18.09.2013
comment
Android предоставляет события для уменьшения/увеличения уровня заряда батареи. Должен быть способ в окнах   -  person Aster Veigas    schedule 18.09.2013
comment
и таймеры будут влиять на батарею в зависимости от интервала   -  person Aster Veigas    schedule 18.09.2013
comment
Я думаю, что, поскольку у вас уже есть таймер, вы можете просто включить в него оператор if, чтобы сделать что-то другое, если batteryLevel отличается от lastBatteryLevel, как я уже сказал, могут быть лучшие способы.   -  person Sayse    schedule 18.09.2013


Ответы (1)


Краткий ответ из библиотеки базовых классов .Net нет.

При этом доступны события питания, но эти события находятся в ядре32. Microsoft пыталась зацепить некоторые из этих событий в классе SystemEvents, но, к сожалению, они не связаны со всеми из них. Глядя на API управления питанием, нет события, которое отслеживает заряд батареи так, как вам нужно.

События Power: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373162(v=vs.85).aspx

В службах управления питанием есть метод GetSystemPowerStatus, с помощью которого можно получить необходимую информацию. Если у вас есть понимание работы с C++ из .Net, вы можете запросить информацию о батарее и, когда она изменится, запустить собственное событие.

GetSystemPowerStatus: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372693(v=vs.85).aspx

person LiquaFoo    schedule 18.09.2013