AppleSeeker's Tech Blog
Welcome to AppleSeeker's space
posts - 34,  comments - 314,  trackbacks - 2

一直就想整理一下所有.Net Compact Framework下的所有托管类使用方法和非托管方法。

写这文章的目的:给那些入门的开发者,以及在需要某些功能的时候可以作为帮助文档来参考。在写这些文章的时候,可能我也是在不断的学习中,对很多知识也不是很了解,各位读者在阅读时,可以将自己的需求和想法告诉我,我会不断扩充和完善它。

文章将先从托管类开始。

开发环境:VS2008,平台:WM6.0 Professional

这篇文章将讲述3个命名空间:
1。Microsoft.WindowsMobile.Status(Microsoft.WindowsMobile.Status.dll
2。Microsoft.WindowsMobile.Telephony(Microsoft.WindowsMobile.Telephony.dll
3。Microsoft.Win32mscorlib.dll

1。Microsoft.WindowsMobile.Status中有2个主要类
SystemState:用于收集和监视系统的很多状态信息,包括日历、邮件、电话、同步、电源等。
RegistryState:用于监视注册表某键值发生变化
另外,该命名空间还包含6个枚举
ActiveSyncStatus:设备的同步状态(同步中、没有同步、同步出错)
BatteryLevel:设备的电池等级(VeryHigh(80%-100%), high(60%-80%), Nomail(20%-60%), Low(10%-20%), VeryLow(0%-10%))
BatteryState:电池状态(Critical, Low, Nomail)
LockStates:设备锁定的状态(DeviceLock, KeyLock, None, SimLock
SystemProperty:SystemState中用于监视的所有信息。

Demo1:
监视电池信息:一旦电池等级发生变化,则触发。

图片1:整个Demo运行后,初始界面。当点击“Current Status”,则显示当前电池等级。


图片2:改变电池等级的方法。


图片3:立即触发事件,这里我定义为显示新的电池等级。


主要代码:

1private void StatusForm_Load(object sender, EventArgs e)
2        {
3            status = new SystemState(SystemProperty.PowerBatteryStrength);
4            status.Changed +=new ChangeEventHandler(status_Changed);
5
6            regStatus = new RegistryState(@"HKEY_CURRENT_USER\My User Key""My Key Value");
7            regStatus.Changed += new ChangeEventHandler(regStatus_Changed);
8        }
status为System Status对象,在Form_Load里初始化,并注册其Change事件,一旦发生改变则触发。

1this.listBox1.Items.Add("Current Value : " + ((BatteryLevel)SystemState.GetValue(SystemProperty.PowerBatteryStrength)).ToString());
“Current Status”事件中取得电池信息。通过GetValue。

1private void status_Changed(object sender, ChangeEventArgs arg)
2        {
3            this.listBox1.Items.Add("New Value : " + ((BatteryLevel)arg.NewValue).ToString());
4        }
发生变化,则触发的注册事件

Demo2:监视注册表变化
在移动设备的注册表中,分ClassesRootLocalMachineCurrentUserUsers这4个。
Demo中,监视的键值为:HKEY_CURRENT_USER\My User Key下的My Key Value键的值

点击图3中的“Change Registry”修改键值,图4中则显示监视效果。


代码:

1private void StatusForm_Load(object sender, EventArgs e)
2        {
3            status = new SystemState(SystemProperty.PowerBatteryStrength);
4            status.Changed +=new ChangeEventHandler(status_Changed);
5
6            regStatus = new RegistryState(@"HKEY_CURRENT_USER\My User Key""My Key Value");
7            regStatus.Changed += new ChangeEventHandler(regStatus_Changed);
8        }
注册一个监视事件

1private void regStatus_Changed(object sender, ChangeEventArgs args)
2        {
3            this.listBox1.Items.Add("Registry New Value : " + args.NewValue);
4        }
触发事件的处理

2。Microsoft.WindowsMobile.Telephony中只有Phone
该类提供直接弹出电话拨通界面。该类提供Talk方法,该方法传入电话号码(string类型)后,拨号。

代码:
1private void menuItem5_Click(object sender, EventArgs e)
2        {
3            Phone phone = new Phone();
4            phone.Talk("7272024"true);
5        }
拨打7272024,第二个为是否显示提示信息

图5效果:如果选yes,则会显示拨打界面。该参数可以不传,就不显示该界面。




3。Microsoft.Win32
提供Registry,RegistryKey2个类
提供RegistryHiveRegistryKeyPermissionCheckRegistryValueKindRegistryValueOptions四个枚举。
该类使用和完全版Framework下的一致。

该Demo中的代码:

 1            RegistryKey key = Registry.CurrentUser;
 2            RegistryKey regMyKey = key.OpenSubKey(SUB_KEY,true);
 3            if (regMyKey != null)
 4            {
 5                if (regMyKey.GetValue(SUB_KEY_NAME).ToString() == "1")
 6                    regMyKey.SetValue(SUB_KEY_NAME, "0", RegistryValueKind.String);
 7                else
 8                    regMyKey.SetValue(SUB_KEY_NAME, "1");
 9            }

10            else
11            {
12                key = key.CreateSubKey(SUB_KEY);
13                key.SetValue(SUB_KEY_NAME, "1", RegistryValueKind.String);
14            }
注意事项:OpenSubKey方法的第二个参数,不传的话,默认为false,则打开的键是只读的,不能调用SetValue修改键值。

总结:
.Net CF毕竟提供了有限的托管代码,所有入门的开发人员看完此文章后,希望能有所帮助。

代码下载:DeviceAPIDemo.rar


Author:Appleseeker
Date:2008-03-04
Tag标签: Windows Mobile
posted on 2008-03-04 13:15 AppleSeeker 阅读(1783) 评论(19)  编辑 收藏 所属分类: .NetMobile

FeedBack:
2008-03-04 14:49 | XX0XX [未注册用户]
简单明了
  回复  引用  查看    
2008-03-04 19:59 | fox23      
支持一个,加油apple
  回复  引用  查看    
#3楼 [楼主]
2008-03-04 20:20 | appleseeker      
@fox23
谢谢,先把托管代码写完看看,呵呵。
  回复  引用  查看    
2008-03-04 22:43 | artless      
LZ,俺是做这个毕业设计的,有机会可以交个朋友^_^
  回复  引用  查看    
#5楼 [楼主]
2008-03-05 08:30 | appleseeker      
@artless
好的,很高兴认识你~~~
  回复  引用  查看    
2008-03-05 08:55 | GPS监控 [未注册用户]
适合入门
  回复  引用  查看    
2008-03-05 15:44 | 啊黄      
不错,图文并貌.
  回复  引用  查看    
2008-03-07 17:37 | artless      
请问能不能介绍些入门的书给我?
主要做手机应用开发的
  回复  引用  查看    
#9楼 [楼主]
2008-03-08 10:27 | appleseeker      
@artless
我推荐你经常留意一些博客,至于书籍,我没有看完任何一本关于CF方面的书籍,所以给不了你相关建议。

博客园移动开发:http://mobiledev.cnblogs.com/
黎波:http://upto.cnblogs.com/
张欣:http://twodays.cnblogs.com/
马宁:http://blog.csdn.net/aawolf/
fox23:http://fox23.cnblogs.com/
  回复  引用  查看    
2008-03-11 19:16 | artless      
谢谢了,好像国内外的有关这方面的书都不多~
lz何不去写本?
  回复  引用  查看    
2008-03-11 19:28 | artless      
最近毕业论文要写开题报告,lz有没有好的建议?不知道自己能做些什么?(windows mobile 应用开发)
  回复  引用  查看    
#12楼 [楼主]
2008-03-11 21:52 | appleseeker      
@artless
我也想写书,但所限自己知识有限,怕误人子弟,学识学识,最重要的是将知识完全分享,但前提是必须要对你传授的知识负责。

论文:可以做个订单系统,或者配送系统(不带gps的)。仅供参考。
  回复  引用  查看    
2008-03-12 08:45 | tatung zhang      
不错,建议楼主以后能写些和数据交互的,怎样能更好的提高系统性能的文章.
  回复  引用  查看    
2008-03-12 09:18 | 小嗖风风 [未注册用户]
LZ你好,我最近也在做移动开发的项目,多多向你学习 :)
  回复  引用  查看    
#15楼 [楼主]
2008-03-12 09:59 | appleseeker      
@tatung zhang
好的,我以后会写关于数据处理方面的文章,谢谢你的关注及意见。
  回复  引用  查看    
#16楼 [楼主]
2008-03-12 09:59 | appleseeker      
@小嗖风风
互相学习。
  回复  引用  查看    
2008-03-12 15:57 | Spring.Cheung      
好,简单明了。
  回复  引用  查看    
2008-05-02 21:47 | artless      
问题:http://msdn.microsoft.com/en-us/library/ms180969.aspx
网址是微软上提供的一个wm5的Directx 2D小游戏
但是运行在模拟器上占用电脑100%CPU,不知道为什么
游戏都不能正常玩
  回复  引用  查看    
#19楼 [楼主]
2008-05-05 21:54 | AppleSeeker      
@artless
我用VS2008运行程序,在WM6.0和5.0上跑没有你说的效果。我不知道游戏是否算玩,我就到了一个3个人的界面。就停住了,只所有CPU占用率高,是因为里面有个while循环,不停的在刷页面。你可以试下断点调试看下就知道了。
  回复  引用  查看    
AppleSeeker
MSN:appleseeker@hotmail.com
Mail:appleseeker@gmail.com

feedsky
google reader
bloglines
newsgator
netvibes
鲜果
哪吒
有道
抓虾
Rojo
my yahoo

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

与我互动

常用链接

留言簿(4)

我参与的团队

我的标签

随笔分类(55)

随笔档案(34)

Mobile Blog

最新随笔

搜索

  •  

积分与排名

  • 积分 - 72971
  • 排名 - 467

最新评论

  • 1. re: Windows Mobile 5.0 (2)
  • @zhangyi85
    @张谊
    不好意思,今天上午看到后,写了篇文章,你可以参考下。
  • --AppleSeeker
  • 2. re: Windows Mobile 5.0 (2)
  • 请问如何才能在本机上用模拟器来访问的到呢?我做好了一个移动的web页面,也发布并挂到了IIS下面了,用IE浏览器测试可以访问,但是打开模拟器,用模拟器里面的IE来访问,就总提示访问不到,但是用模拟器里...
  • --张谊
  • 3. re: Windows Mobile 5.0 (2)
  • 请问如何才能在本机上用模拟器来访问的到呢?我做好了一个移动的web页面,也发布并挂到了IIS下面了,用IE浏览器测试可以访问,但是打开模拟器,用模拟器里面的IE来访问,就总提示访问不到,但是用模拟器里...
  • --zhangyi85
  • 4. re: .Net Compact Framework 高级篇(1)

  • 非常感谢!
  • --charlie2008
  • 5. re: Windows Mobile 5.0 (1)
  • 我就是按照你的安装顺序,可是要生成.cab时,在新建项目-》其他项目类型—》安装和部署-》智能设备cab项目,然后右键program file,选择添加-》项目输出,在弹出的窗口里的 项目 里,下...
  • --Backylee

阅读排行榜

评论排行榜

60天内阅读排行