随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

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   z5337  阅读(366)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示