[CF.Skills]防止Smartphone进入休眠状态

之前我有一篇随笔提到了如何编程在Pocket PC上以预定的时间运行你的程序,也提到了使用OpennetCF实现长时间间隔定时运行程序。文章在这里:
http://www.cnblogs.com/fox23/archive/2008/02/03/AtTime.html
其实还有一种另一种有趣的方式,在Smartphone上面通过简单的注册表设置来防止手机进入休眠状态。

首先,最容易想到的办法就是不断地给OS发送空(键盘)消息:
keybd_event(VK_NONAME, 0, KEYEVENTF_SILENT, 0);
不过这样会把背光也一直开着,这有些浪费哦。于是我们设想要是注册表里面有相关的设置就好了,简单的查阅了一下注册表之后,果然有相应的一些键,可以设置为不让WM设备休眠。
打开VS2008的Remote Registry Editor,连接到我们的Smartphone,这里以WM6.1 Standard为例,浏览到以下目录:


在HKCU/ControlPanel/Power目录下,找到这个display的键,把这个DWORD值(默认为60),改为-1,这样就相当于禁用了系统定时休眠的功能。
接下来,为了让这个改动立即生效,我们得广播一个消息让OS知道初始化时的某个键值发生了改变:
PostMessage(HWND_BROADCAST, WM_WININICHANGE, 00);

在Pocket PC上也有相应的设置:


说到这里,顺便推荐一篇园子里的文章:
http://www.cnblogs.com/Endink/archive/2006/07/18/sharping.html
文中介绍了在托管代码中控制背光和周期性的调用SystemIdleTimerReset()函数来复位休眠定时器的方法,值得一看。
最后,提示一下,对程序中所有对注册表的改动,都别忘了在退出程序的时候将它们还原成原来的设置,以免影响用户的使用。

Enjoy it !

黄季冬



posted on 2008-05-02 14:52 Freesc Huang 阅读(912) 评论(1) 编辑 收藏

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

These postings are provided "AS IS" with no warranties
and confer no rights.


Locations of visitors to this page

Blog Keywords
Embedded System,Visual Studio,.Net Framework,.Net Compact Framework,.Net Micro Framework,Windows Mobile,Windows Embedded CE,Emulator,WCF,CLR,Design & Pattern,C/C++,C#,Matlab,Algorithms
昵称:Freesc Huang
园龄:4年11个月
粉丝:32
关注:4

统计

  • 随笔 - 197
  • 文章 - 0
  • 评论 - 840

搜索

 

随笔分类(227)

随笔档案(197)

Blogs

Link

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜