南山狒狒

专注WinCE和GIS开发,提升ArcGIS和DirectShow,涉及过BizTalk,有Delphi经历
09年后的路,应该好好走了。

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理

在WinCE的项目开发过程中经常要编写AP来获取电池的电量和电源的来源等信息,由于WinCE底层的电池驱动一般以查询的方式得到电池的状态然后更新到一个结构体中,AP可以调用GetSystemPowerStatusEx2来得到这个结构体的数值,为了实时的更新电池的信息AP必须频繁的调用函数去得到数据更新。

其实WinCE的电源管理中已经集成了一种notify机制,会在电池信息发生变化时发出提醒。

RequestPowerNotifications函数可以被AP用来请求接收这种提醒服务。

AP在调用这个API之前必须创建一个消息队列,可以用CreateMsgQueue来实现。

接受提醒的方式是使用WaitForSingleObject来实现,该函数会一直等待直到收到电源管理发来的提醒,然后AP可以去读取消息队列中的数据来判定具体电源系统发生了哪些变化,然后做相关的事情比如更新UI的显示等。

参考源代码:

//#################################################################
#include <Pm.h>
#define  QUEUE_ENTRIES    3 
#define  MAX_NAMELEN      200 
#define  QUEUE_SIZE       (QUEUE_ENTRIES  *  (sizeof(POWER_BROADCAST)  +  MAX_NAMELEN)) 
HANDLE hMsgQ;
DWORD WINAPI PowerChangeListen(void * temp_p)
{

Code

}

void Init_PowerNotify()
{

Code

}
//###############################################################################################

AP可以把上面的代码全部复制到自己的源码中,然后在初始化的时候调用一次Init_PowerNotify,之后就可以等待消息的发生(中文注释部分)

posted on 2009-02-01 09:45  Jrong  阅读(1070)  评论(1编辑  收藏  举报