Win CE 5.0 增加电池电量显示

摘自 http://blog.csdn.net/li0531/article/details/8818243

同时只在右上角显示一个 Label 控件,因此代码量精简了很多。

[DllImport("coredll")]
private static extern int GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
[DllImport("coredll")]
public static extern void SystemIdleTimerReset();
private SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX(); /// <summary>  
///// 是否充电状态  
///// </summary>  
//private State AState = State.Normal;
/// <summary>  
/// 电池当前状态 Charge:充电中;UnderCharge:电量不足;Normal:电池正常使用.  
/// </summary>  
public enum State
{
    /// <summary>  
    /// 充电中  
    /// </summary>  
    Charge,
    /// <summary>  
    /// 充电不足  
    /// </summary>  
    UnderCharge,
    /// <summary>  
    /// 正常状态  
    /// </summary>  
    Normal,
    /// <summary>  
    /// 充电完成  
    /// </summary>  
    ChargeFinally
};
private class SYSTEM_POWER_STATUS_EX
{
    public byte ACLineStatus = 0;
    public byte BatteryFlag = 0;
    public byte BatteryLifePercent = 0;
    public byte Reserved1 = 0;
    public uint BatteryLifeTime = 0;
    public uint BatteryFullLifeTime = 0;
    public byte Reserved2 = 0;
    public byte BackupBatteryFlag = 0;
    public byte BackupBatteryLifePercent = 0;
    public byte Reserved3 = 0;
    public uint BackupBatteryLifeTime = 0;
    public uint BackupBatteryFullLifeTime = 0;
}

/// <summary>
/// 创建电源指示
/// </summary>
private void GetBatteryState()
{
    if (GetSystemPowerStatusEx(status, false) == 1)
    {
        if (status.BatteryLifePercent >= 95)
        {
            labBattery.Text = "100";
            labBattery.ForeColor = Color.Green;
        }
        else if (status.BatteryLifePercent <= 20)
        {
            if (status.ACLineStatus == 1)
                labBattery.Text = status.BatteryLifePercent.ToString() + " +";
            else
                labBattery.Text = "! " + status.BatteryLifePercent.ToString();
            labBattery.ForeColor = Color.Red;
        }
        else
        {
            labBattery.Text = status.BatteryLifePercent.ToString() + (status.ACLineStatus == 1 ? " +" : "");
            labBattery.ForeColor = Color.Blue;
        }
    }
}

我是在 Timer 控件下以 10m 的频率调用这个方法的。

posted on 2015-08-08 16:08  z5337  阅读(361)  评论(0编辑  收藏  举报