Windows Embedded CE和Windows Mobile下ActiveSync开发

背景

用过Windows Mobile的人大概都有使用USB线链接手机到PC的经历,这一般由ActiveSync来完成软件功能。ActiveSync在Windows Embedded CE以及Windows Mobile 和PC的互操作中扮演重要的角色,使用了ActiveSync,PC就可以检查 Windows Embedded CE以及Windows Mobile 设备的硬件,操作系统,内存等等版本信息,访问和修改注册表,增删改文件和传输文件,甚至调用设备的DLL。本文讲述ActiveSync的开发。

 

什么是ActiveSync

ActiveSync是微软开发的数据同步程序,使得PC可以同步Windows Embedded CE以及Windows Mobile 等设备上的文档,邮件,日历安排,联系人列表等。同时ActiveSync提供手工文件传输和同步功能,可以在PC上安装和卸载Windows Embedded CE以及Windows Mobile 等设备上程序。在Vista之后,ActiveSync被Windows Mobile Device Center所取缔。

 

什么是RNDIS

RNDIS(Remote NDIS)是另外一种比较常用的通过USB连接Windows Embedded CE设备和PC的规范。

 

Remote NDIS Drivers for USB

Remote NDIS Drivers for USB

图转自http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx

 

从开发者的角度可以把RNDIS理解为IP over USB,C和Windows Embedded CE链接了以后会分配IP地址,可以基于这个IP网来进行开发。RNDIS广泛应用于USB设备中,例如ADSL设备一般支持RNDIS,这样连上USB就能对设备进行配置了。

 

下载

ActiveSync只能用于XP,当前为4.5版本,下载链接如下:Download Microsoft ActiveSync 4.5

如果使用Vista,请使用Windows Mobile Device Center,目前版本为6.1,下载链接如下:Download Windows Mobile Device Center 6.1

对于ActiveSync的开发,我使用了 OpenNETCF Desktop Communication Library 库,这是一个基于The MIT License (MIT)的开源库。先到下面链接下载。http://rapi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29281

 

接口

ActiveSync的功能封装在OpenNETCF Desktop Communication Library 库的ActiveSync类。

activesync-1

方法

ActiveSync类通过ConnectNow()和DisconnectNow()对设备进行链接,断开。

rapi.ActiveSync.ConnectNow();
rapi.ActiveSync.ShowCommSettings();
rapi.ActiveSync.DisconnectNow();

ShowCommSettings()显示当前设备链接状态。

属性

当设备链接时候或者断开的时候,也可以配置自动启动程序。

rapi.ActiveSync.AutoConnect = true;
rapi.ActiveSync.AutoStartOnConnect.Add(@"C:\WINDOWS\notepad.exe");
rapi.ActiveSync.AutoStartOnDisconnect.Add(@"C:\WINDOWS\regedit.exe");

设置属性 AutoConnect 为true,当设备链接的时候,activesync自动链接。设置AutoStartOnConnect和AutoStartOnDisconnect,当链接或者断开的时候,自动启动配置的程序。

事件

通过订阅Active和Disconnect事件来处理链接状态变更消息。

rapi.ActiveSync.Active += new ActiveHandler(ActiveSync_Active);
rapi.ActiveSync.Disconnect += new DisconnectHandler(ActiveSync_Disconnect);

 

 

 

void ActiveSync_Disconnect()
{
labelActiveSync.Text = "Device disconnected";
}

void ActiveSync_Active()
{
labelActiveSync.Text = "Device connected";
}

 

讲到这里,很简单,下一篇将RAPI。

posted @ 2010-01-25 09:14  Jake Lin  阅读(4150)  评论(6编辑  收藏  举报