zoukankan      html  css  js  c++  java
  • 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 的频率调用这个方法的。

  • 相关阅读:
    Linux文件系统之INode
    手写Netty之多路复用Select小案例
    多路复用器Select、Poll、Epoll区别梳理
    NAT模式、路由模式、桥接模式的区别
    Netty编解码器(理论部分)
    Netty之Unpooled_Bytebuf
    为什么 TCP 协议有粘包问题
    IDEA_2019.1版本中Protobuf的使用
    Netty服务端Server代码说明
    Netty之ChannelHandler
  • 原文地址:https://www.cnblogs.com/z5337/p/4713340.html
Copyright © 2011-2022 走看看