电池电量c#

时间:2013-09-18 07:13:20

标签: c# events windows-8 batterylevel

我有一种确定电池电量的方法,并保留定时器以定期检查电池电量。

   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,并且工作正常。

1 个答案:

答案 0 :(得分:2)

简短回答来自.Net基类库编号

据说有可用的电源事件,但这些事件都在kernel32中。 Microsoft确实尝试在SystemEvents类中为您提供一些这些事件的钩子,但不幸的是它们并没有与所有这些事件联系在一起。查看Power Management API,没有按照您希望的方式跟踪电池的事件。

电力事件: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373162(v=vs.85).aspx

Power Management Services有一个名为GetSystemPowerStatus的方法,可以为您提供所需的信息。如果您对从.Net内部使用C ++有所了解,您可以查询电池信息以及何时更改您自己的事件。

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