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 @   Jake Lin  阅读(4158)  评论(6编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示