WINCE 电池状态(C#)
根据网上搜集资料,最后整理 分享下
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Drawing;
- namespace PDAeffect
- {
- public class BatteryControl
- {
- /// <summary>
- /// 外边框
- /// </summary>
- private Point[] BatteryPolygon = new Point[8];
- /// <summary>
- /// 是否充电状态
- /// </summary>
- private State AState = State.Normal;
- private int Percent = 0;
- private int iLeft = 30 + 2, iTop = 178, iWidth = 20, iHeight = 10;
- private int iRectWidth = 0;
- private Rectangle Rect = new Rectangle();
- private string text = "";
- private SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX();
- /// <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;
- }
- [DllImport("coredll")]
- private static extern int GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
- [DllImport("coredll")]
- public static extern void SystemIdleTimerReset();
- /// <summary>
- /// 构造函数 在屏幕默认位置构建电池形状
- /// </summary>
- public void Battery()
- {
- SetPolygon();
- }
- /// <summary>
- /// 构造函数 电池形状的X和Y坐标
- /// </summary>
- /// <param name="StartLeft">电池形状的X坐标</param>
- /// <param name="StartTop">电池形状的Y坐标</param>
- public void Battery(int StartLeft, int StartTop)
- {
- iLeft = StartLeft;
- iTop = StartTop;
- SetPolygon();
- }
- /// <summary>
- /// 构造函数 根据X坐标、Y坐标、宽度、高度构造电池形状
- /// </summary>
- /// <param name="StartLeft">电池形状的X坐标</param>
- /// <param name="StartTop">电池形状的Y坐标</param>
- /// <param name="StartWidth">电池形状的宽度</param>
- /// <param name="StartHeight">电池形状的高度</param>
- public void Battery(int StartLeft, int StartTop, int StartWidth, int StartHeight)
- {
- iLeft = StartLeft;
- iTop = StartTop;
- iWidth = StartWidth;
- iHeight = StartHeight;
- SetPolygon();
- }
- /// <summary>
- /// 设置电池形状
- /// </summary>
- void SetPolygon()
- {
- int Head = 2;
- int HeightLowHalf = (Height - Head) / 2;
- //外边框
- BatteryPolygon[0].X = iLeft;
- BatteryPolygon[0].Y = iTop;
- BatteryPolygon[1].X = iLeft + iWidth;
- BatteryPolygon[1].Y = iTop;
- BatteryPolygon[2].X = iLeft + iWidth;
- BatteryPolygon[2].Y = iTop + HeightLowHalf;
- BatteryPolygon[3].X = iLeft + iWidth + Head;
- BatteryPolygon[3].Y = iTop + HeightLowHalf;
- BatteryPolygon[4].X = iLeft + iWidth + Head;
- BatteryPolygon[4].Y = iTop + HeightLowHalf + Head;
- BatteryPolygon[5].X = iLeft + iWidth;
- BatteryPolygon[5].Y = iTop + HeightLowHalf + Head;
- BatteryPolygon[6].X = iLeft + iWidth;
- BatteryPolygon[6].Y = iTop + HeightLowHalf + Head + HeightLowHalf;
- BatteryPolygon[7].X = iLeft;
- BatteryPolygon[7].Y = iTop + HeightLowHalf + Head + HeightLowHalf;
- //内矩形
- Rect.X = BatteryPolygon[0].X + 2;
- Rect.Y = BatteryPolygon[0].Y + 2;
- Rect.Width = BatteryPolygon[6].X - BatteryPolygon[0].X - 3;
- Rect.Height = BatteryPolygon[6].Y - BatteryPolygon[0].Y - 3;
- iRectWidth = Rect.Width;
- GetBatteryState();
- }
- /// <summary>
- /// 获取电池状态
- /// </summary>
- public void GetBatteryState()
- {
- if (GetSystemPowerStatusEx(status, false) == 1)
- {
- if (status.ACLineStatus == 1)
- {
- //BatteryFlag = 128 充电完成
- if(status.BatteryFlag == 128)
- //if (status.BatteryLifePercent >= 100)
- {
- //status.BatteryLifePercent = 100; //.BatteryFullLifeTime
- text = "充电完成...";
- AState = State.ChargeFinally;
- } //BatteryFlag = 8 正在充电
- else
- {
- AState = State.Charge;
- text = "充电中...";
- }
- }
- else
- {
- //BatteryFlag = 1 正在使用电池
- AState = State.Normal;
- if (status.BatteryLifePercent > 100) status.BatteryLifePercent = 100;
- text = status.BatteryLifePercent.ToString() + "%";
- }
- Percent = status.BatteryLifePercent;
- if (Percent <= 20)
- {
- AState = State.UnderCharge;
- text = "电量不足...";
- }
- Rect.Width = iRectWidth * ((Percent + 5) > 100 ? 100 : Percent + 8) / 100;
- }
- }
- /// <summary>
- /// 电池形状X坐标
- /// </summary>
- public int Left
- {
- get { return iLeft; }
- set { iLeft = value; SetPolygon(); }
- }
- /// <summary>
- /// 电池形状Y坐标
- /// </summary>
- public int Top
- {
- get { return iTop; }
- set { iTop = value; SetPolygon(); }
- }
- /// <summary>
- /// 电池形状宽度
- /// </summary>
- public int Width
- {
- get { return iWidth; }
- set { iWidth = value; SetPolygon(); }
- }
- /// <summary>
- /// 电池形状高度
- /// </summary>
- public int Height
- {
- get { return iHeight; }
- set { iHeight = value; SetPolygon(); }
- }
- /// <summary>
- /// 电池电量百分比
- /// </summary>
- public int BatteryPercent
- {
- get { return Percent; }
- }
- /// <summary>
- /// 电池状态
- /// </summary>
- public Rectangle BatteryState
- {
- get
- {
- GetBatteryState();
- return Rect;
- }
- }
- /// <summary>
- /// 电池外边框
- /// </summary>
- public Point[] BatteryStateRect
- {
- get { return BatteryPolygon; }
- set { BatteryPolygon = value; }
- }
- /// <summary>
- /// 当前电池状态,有充电、充电不足、正常 三种状态
- /// </summary>
- public State Status
- {
- get { return AState; }
- }
- /// <summary>
- /// 电池显示的内容
- /// </summary>
- public string Text
- {
- get { return text; }
- }
- }
- }
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing; namespace PDAeffect
{
public class BatteryControl
{
/// <summary>
/// 外边框
/// </summary>
private Point[] BatteryPolygon = new Point[8];
/// <summary>
/// 是否充电状态
/// </summary>
private State AState = State.Normal;
private int Percent = 0;
private int iLeft = 30 + 2, iTop = 178, iWidth = 20, iHeight = 10;
private int iRectWidth = 0;
private Rectangle Rect = new Rectangle();
private string text = "";
private SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX();
/// <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;
}
[DllImport("coredll")]
private static extern int GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
[DllImport("coredll")]
public static extern void SystemIdleTimerReset();
/// <summary>
/// 构造函数 在屏幕默认位置构建电池形状
/// </summary>
public void Battery()
{
SetPolygon();
}
/// <summary>
/// 构造函数 电池形状的X和Y坐标
/// </summary>
/// <param name="StartLeft">电池形状的X坐标</param>
/// <param name="StartTop">电池形状的Y坐标</param>
public void Battery(int StartLeft, int StartTop)
{
iLeft = StartLeft;
iTop = StartTop;
SetPolygon();
}
/// <summary>
/// 构造函数 根据X坐标、Y坐标、宽度、高度构造电池形状
/// </summary>
/// <param name="StartLeft">电池形状的X坐标</param>
/// <param name="StartTop">电池形状的Y坐标</param>
/// <param name="StartWidth">电池形状的宽度</param>
/// <param name="StartHeight">电池形状的高度</param>
public void Battery(int StartLeft, int StartTop, int StartWidth, int StartHeight)
{
iLeft = StartLeft;
iTop = StartTop;
iWidth = StartWidth;
iHeight = StartHeight;
SetPolygon();
}
/// <summary>
/// 设置电池形状
/// </summary>
void SetPolygon()
{
int Head = 2;
int HeightLowHalf = (Height - Head) / 2;
//外边框
BatteryPolygon[0].X = iLeft;
BatteryPolygon[0].Y = iTop;
BatteryPolygon[1].X = iLeft + iWidth;
BatteryPolygon[1].Y = iTop;
BatteryPolygon[2].X = iLeft + iWidth;
BatteryPolygon[2].Y = iTop + HeightLowHalf;
BatteryPolygon[3].X = iLeft + iWidth + Head;
BatteryPolygon[3].Y = iTop + HeightLowHalf;
BatteryPolygon[4].X = iLeft + iWidth + Head;
BatteryPolygon[4].Y = iTop + HeightLowHalf + Head;
BatteryPolygon[5].X = iLeft + iWidth;
BatteryPolygon[5].Y = iTop + HeightLowHalf + Head;
BatteryPolygon[6].X = iLeft + iWidth;
BatteryPolygon[6].Y = iTop + HeightLowHalf + Head + HeightLowHalf;
BatteryPolygon[7].X = iLeft;
BatteryPolygon[7].Y = iTop + HeightLowHalf + Head + HeightLowHalf;
//内矩形
Rect.X = BatteryPolygon[0].X + 2;
Rect.Y = BatteryPolygon[0].Y + 2;
Rect.Width = BatteryPolygon[6].X - BatteryPolygon[0].X - 3;
Rect.Height = BatteryPolygon[6].Y - BatteryPolygon[0].Y - 3;
iRectWidth = Rect.Width;
GetBatteryState();
}
/// <summary>
/// 获取电池状态
/// </summary>
public void GetBatteryState()
{
if (GetSystemPowerStatusEx(status, false) == 1)
{
if (status.ACLineStatus == 1)
{
//BatteryFlag = 128 充电完成
if(status.BatteryFlag == 128)
//if (status.BatteryLifePercent >= 100)
{
//status.BatteryLifePercent = 100; //.BatteryFullLifeTime
text = "充电完成...";
AState = State.ChargeFinally;
} //BatteryFlag = 8 正在充电
else
{
AState = State.Charge;
text = "充电中...";
}
}
else
{
//BatteryFlag = 1 正在使用电池
AState = State.Normal;
if (status.BatteryLifePercent > 100) status.BatteryLifePercent = 100;
text = status.BatteryLifePercent.ToString() + "%";
}
Percent = status.BatteryLifePercent;
if (Percent <= 20)
{
AState = State.UnderCharge;
text = "电量不足...";
}
Rect.Width = iRectWidth * ((Percent + 5) > 100 ? 100 : Percent + 8) / 100;
}
}
/// <summary>
/// 电池形状X坐标
/// </summary>
public int Left
{
get { return iLeft; }
set { iLeft = value; SetPolygon(); }
}
/// <summary>
/// 电池形状Y坐标
/// </summary>
public int Top
{
get { return iTop; }
set { iTop = value; SetPolygon(); }
}
/// <summary>
/// 电池形状宽度
/// </summary>
public int Width
{
get { return iWidth; }
set { iWidth = value; SetPolygon(); }
}
/// <summary>
/// 电池形状高度
/// </summary>
public int Height
{
get { return iHeight; }
set { iHeight = value; SetPolygon(); }
}
/// <summary>
/// 电池电量百分比
/// </summary>
public int BatteryPercent
{
get { return Percent; }
}
/// <summary>
/// 电池状态
/// </summary>
public Rectangle BatteryState
{
get
{
GetBatteryState();
return Rect;
}
}
/// <summary>
/// 电池外边框
/// </summary>
public Point[] BatteryStateRect
{
get { return BatteryPolygon; }
set { BatteryPolygon = value; }
}
/// <summary>
/// 当前电池状态,有充电、充电不足、正常 三种状态
/// </summary>
public State Status
{
get { return AState; }
}
/// <summary>
/// 电池显示的内容
/// </summary>
public string Text
{
get { return text; }
}
}
}
方法1:
- WinCE获取电池充电状态
- SYSTEM_POWER_STATUS_EX2 powerState;
- memset(&powerState, 0, sizeof(powerState));
- DWORD dwResult = GetSystemPowerStatusEx2(&powerState, sizeof(powerState), TRUE);
- if(dwResult != 0)
- {
- if(powerState.ACLineStatus == AC_LINE_ONLINE)
- {
- //MessageBox(_T("交流电"));
- if(powerState.BatteryFlag != BATTERY_FLAG_HIGH)
- {
- // 正在充电
- //SetPowerStepBmp(200);
- MessageBox(_T("充电..."));
- }
- else
- {
- // 充电结束
- //SetPowerStepBmp(300);
- MessageBox(_T("充电结束..."));
- }
- }
- else
- {
- MessageBox(_T("直流电"));
- //INT pow = GetPowerStep((INT)powerState.BatteryLifePercent);
- //SetPowerStepBmp((INT)powerState.BatteryLifePercent);
- }
- }
WinCE获取电池充电状态 SYSTEM_POWER_STATUS_EX2 powerState; memset(&powerState, 0, sizeof(powerState)); DWORD dwResult = GetSystemPowerStatusEx2(&powerState, sizeof(powerState), TRUE); if(dwResult != 0) { if(powerState.ACLineStatus == AC_LINE_ONLINE) { //MessageBox(_T("交流电")); if(powerState.BatteryFlag != BATTERY_FLAG_HIGH) { // 正在充电 //SetPowerStepBmp(200); MessageBox(_T("充电...")); } else { // 充电结束 //SetPowerStepBmp(300); MessageBox(_T("充电结束...")); } } else { MessageBox(_T("直流电")); //INT pow = GetPowerStep((INT)powerState.BatteryLifePercent); //SetPowerStepBmp((INT)powerState.BatteryLifePercent); } }
效果图(见右上角):
(部分桌面内容,受保护已抹掉)
WINCE 电池状态(C#)的更多相关文章
-
几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&;震动api
受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...
-
与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复
[源码下载] 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 作者:webabcd 介绍与众不同 win ...
-
IOS 特定于设备的开发:检查设备接近度和电池状态
UIDevice类提供了一些API,使你能够跟踪设备的特征,包括电池的状态和接近度传感器.他们二者都以通知的形式提供更新,可以订阅他们,以便在有重要的更新时通知你的应用程序. 1>启动和禁用接近 ...
-
Android - 电池状态
为了解决电池图标的问题,顺带看了看电池信息的获取方法 :自己写了一个小栗子,来验证一下效果 电池的信息,一般都在BatteryManager里面,信息是用广播发出的.我们更新信息需要一个广播接收器 注 ...
-
Android监听电池状态
监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...
-
生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
2018-01-02 实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决? 今天我翻腾出自己的kindle,好久没用了,屏幕一直是一个电池状态,充电头+线充了2个钟头,按电源键木有反应,也是 ...
-
android 获得电池状态
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
-
Android虚拟机电池状态设置
问题描述: 安装SDK后使用AVD配合APPIUM进行测试,此时虚拟机的电池状态为0%充电中:部分APP会对手机电池状态有要求,不符合要求时,无法安装或打开. 解决思路: 1.Android系统设置( ...
-
html5电池状态相关API
var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery || navigator.msBa ...
随机推荐
-
chrome快捷键,让开发更快捷:
9:18 2015/12/9chrome快捷键,让开发更快捷:部分:按住 Ctrl 键,然后点击链接 从后台在新标签页中打开链接,但您仍停留在当 前标签页中 按住 Ctrl+Shift 键,然后点击链 ...
-
DotNetBar的初步使用
以前有用过SkinSharp和IrisSkin2皮肤控件来美化UI,简单易用,但不方便自定义.而DotNetBar功能很强大,不仅有Windows2007风格,更有Ribbon风格的界面效果.其效果演 ...
-
Mvc4_传值取值应用
Mvc路由运行机制: 首先,Web 浏览器向服务器发送一条URL 请求,如http://HostName/ControllerName/ActionName/Parameters. 其次,请求被A ...
-
JavaScript高级程序设计(第三版)学习笔记1~5章
第2章,在html中使用JavaScript Html引入外部js脚本 <script type="text/javascript" src="test.js&qu ...
-
李洪强iOS开发Swift篇—05_元组类型
李洪强iOS开发Swift篇—05_元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let po ...
-
201512读书分享——读《做自己的No.1》“哪一天”是永远不会到来的
在看这本书的同时,最近也看了一部电影叫做<令人怦然心动的人生整理魔法>,讲一个女孩子平常不善收理,然后房间和人生乱七八糟,她总想着“等哪一天有空了就收拾”.但是,最终一句话打醒了——“哪一 ...
-
清除NT Kernel &; System占用80端口
运行'netstat -ano'发现80端口被system占用,进程号'4'转到任务管理器上看pid对应的进程描述是NT kernel & system. 解决方法: 1.1运行'regedi ...
-
A2D规则引擎
A2D规则引擎 写了个简单的规则引擎,普通情况够用了: 比如2家公司有各自的利率计算规则,如下: 在C#方面,没有写在C#的业务逻辑代码中,而是移到了外部规则文件中,如(ACompanyRatePol ...
-
MD5加密工具类
简单的md5加密: package com.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithm ...
-
Setup Post-mission Camera
编辑BP_GameMode 新建Actor命名为BP_SpectatingViewpoint 添加摄像机 将摄像机调整到合适的位置,右键选择 调整到合适的位置,点击这个按钮,退出驾驶模式 摄像机已经移 ...