一直就想整理一下所有.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.Win32(mscorlib.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”,则显示当前电池等级。
![](https://i-blog.csdnimg.cn/blog_migrate/8fc7d3c6849a204710617e0e569aab42.jpeg)
图片2:改变电池等级的方法。
![](https://i-blog.csdnimg.cn/blog_migrate/23b62188612f54f993d87a7d22ca459c.jpeg)
图片3:立即触发事件,这里我定义为显示新的电池等级。
![](https://i-blog.csdnimg.cn/blog_migrate/80f110ec9795432ca3fa7d880def0e3c.jpeg)
主要代码:
1
private
void
StatusForm_Load(
object
sender, EventArgs e)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
status = new SystemState(SystemProperty.PowerBatteryStrength);
4
status.Changed +=new ChangeEventHandler(status_Changed);
5![](/Images/OutliningIndicators/InBlock.gif)
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事件,一旦发生改变则触发。
1
this
.listBox1.Items.Add(
"
Current Value :
"
+
((BatteryLevel)SystemState.GetValue(SystemProperty.PowerBatteryStrength)).ToString());
“Current Status”事件中取得电池信息。通过GetValue。
1
private
void
status_Changed(
object
sender, ChangeEventArgs arg)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
this.listBox1.Items.Add("New Value : " + ((BatteryLevel)arg.NewValue).ToString());
4
}
发生变化,则触发的注册事件
Demo2:监视注册表变化
在移动设备的注册表中,分ClassesRoot,LocalMachine,CurrentUser,Users这4个。
Demo中,监视的键值为:HKEY_CURRENT_USER\My User Key下的My Key Value键的值
点击图3中的“Change Registry”修改键值,图4中则显示监视效果。
![](https://i-blog.csdnimg.cn/blog_migrate/9850821ff7f3035a8e5b92430d0afa8d.jpeg)
代码:
1
private
void
StatusForm_Load(
object
sender, EventArgs e)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
status = new SystemState(SystemProperty.PowerBatteryStrength);
4
status.Changed +=new ChangeEventHandler(status_Changed);
5![](/Images/OutliningIndicators/InBlock.gif)
6
regStatus = new RegistryState(@"HKEY_CURRENT_USER\My User Key", "My Key Value");
7
regStatus.Changed += new ChangeEventHandler(regStatus_Changed);
8
}
注册一个监视事件
1
private
void
regStatus_Changed(
object
sender, ChangeEventArgs args)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
this.listBox1.Items.Add("Registry New Value : " + args.NewValue);
4
}
触发事件的处理
2。Microsoft.WindowsMobile.Telephony中只有Phone类
该类提供直接弹出电话拨通界面。该类提供Talk方法,该方法传入电话号码(string类型)后,拨号。
代码:
1
private
void
menuItem5_Click(
object
sender, EventArgs e)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
Phone phone = new Phone();
4
phone.Talk("7272024", true);
5
}
拨打7272024,第二个为是否显示提示信息
图5效果:如果选yes,则会显示拨打界面。该参数可以不传,就不显示该界面。
![](https://i-blog.csdnimg.cn/blog_migrate/9c214b707c1e48c620b33120e3b40643.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/a27c4949adfa324b6815e483b678b6bf.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/bffd92c7dcf125a93352aa9287b35f7b.jpeg)
3。Microsoft.Win32
提供Registry,RegistryKey2个类
提供RegistryHive,RegistryKeyPermissionCheck,RegistryValueKind,RegistryValueOptions四个枚举。
该类使用和完全版Framework下的一致。
该Demo中的代码:
1
RegistryKey key
=
Registry.CurrentUser;
2
RegistryKey regMyKey
=
key.OpenSubKey(SUB_KEY,
true
);
3
if
(regMyKey
!=
null
)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
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
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
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