使用RAPI库操作移动设备——C#语言描述
WINCE和Winows Mobile的开发资源很繁杂,很多人常常弄不清究竟要安装哪些工具才能搭建出合适的开发环境。但是我相信Microsoft SMARTPHONE 2003 SDK和Microsoft POCKETPC 2003 SDK是所有的人都知道的,它们分别为SmartPhone和PocketPC提供了必不可少的支持。以Microsoft SMARTPHONE 2003 SDK为例吧。
SMARTPHONE SDK包含了大量的API,列表如下(选自SDK文档):
| Smartphone API | Description |
| ActiveSync | 创建移动应用程序安装和配置,同步服务模块,过滤器和协助访问ActiveSync服务的应用。 |
| Bluetooth API | 创建支持蓝牙设备的Mobile应用程序,比如耳机,打印机和其他移动设备。 |
| CE Messaging (CEMAPI) | 创建messaging applications |
| Configuration Service Providers | 创建可配置各种CSPs(Configuration Service Providers)的应用 |
| Connection Manager | 创建可自动管理移动设备网络连接的应用 |
| Control API | 在你的移动应用程序中使用Smartphone控件 |
| Device Management API | 创建可远程访问移动设备配置管理的应用程序 |
| Game API (GAPI) | 创建高性能的实时游戏 |
| Home Screen API | 创建用户界面插件 |
| HTML Control | 创建可显示HTML文本和嵌入图片,解析XML和绑定URL到别名的应用程序 |
| MIDI | 创建可播放MIDI文件的应用程序 |
| Object Exchange (OBEX) | 创建对象交换应用,允许移动设备自由的通过无线交换数据 |
| Pocket Outlook Object Model (POOM) API | 创建可操作收件箱部件(联系人,日历和任务)的移动应用程序 |
| Projects Control | 创建可以和Projects Control交互的应用 |
| Remote API (RAPI) | 创建可以同步或控制移动设备的桌面应用程序 |
| Speech Recognizer | 为应用程序增加语音识别功能(比如语音拨号) |
| Telephony | 创建支持电话和短信的应用程序 |
| User Interface | 管理输入面板,增加用户界面元素到你的移动应用程序 |
| Vibrate API | 为你的移动应用程序增加震动特性 |
| Voice Recorder Control | 创建移动数字录音程序 |
| Windows User Interface Controls | 创建将移动扩展合并到标准Microsoft® Windows® CE用户界面控件的应用 |
要创建Desktop<=>Device的桌面同步管理程序,主要就依靠SDK API中的Remote API(RAPI)。RAPI 库由一组函数组成,这些函数可用于通过桌面应用程序管理设备,包括设备的目录文件、设备的注册表和系统信息。废话不多说,我们先来看看如何管理设备中的目录文件。
RAPI提供了一组文件管理的方法(不完全列表,详见SDK文档。):
| Function | Description |
| CeCopyFile | 复制文件 |
| CeCreateDirectory | 创建目录 |
| CeCreateFile | 创建,打开文件、管道、通讯资源、磁盘设备或者控制台。返回一个句柄用来访问对象。 |
| CeDeleteFile | 删除文件 |
| CeFindAllFiles | 从指定的Windows CE目录中获取所有文件和目录的信息,并且复制到一个包含CE_FIND_DATA结构的数组中 |
| CeFindFirstFile | 在目录中查找匹配给定文件名的一个文件 |
| CeFindClose | 关闭指定的查找句柄,CeFindFirstFile和CeFindNextFile 函数用这个句柄查找文件 |
| CeFindNextFile | 从上一次访问的CeFindFirstFile继续查找文件 |
| CeGetFileAttributes | 返回指定文件或目录的属性 |
| CeGetFileSize | 获取指定文件的字节大小 |
| CeGetFileTime | 获取文件创建日期时间,最后访问日期时间和最后修改日期时间 |
| CeMoveFile | 移动(重命名)一个文件或者目录 |
| CeReadFile | 从文件指针处读取文件数据 |
| CeWriteFile | 从文件指针处写入文件数据 |
首先要说明的是,任何RAPI操作都需要首先初始化与设备的连接:
| Function | Description |
| CeRapiInit (RAPI) | 创建Windows CE remote application-programming interface (RAPI). |
| [C#.NET] using System; public class RAPI |
|
|
连接建立后,就可以进行文件操作了。看一个将文件复制到设备的例子:
| [C#.NET] using System; public class RAPI // 声明要引用的API |
|
|
操作完毕后在合适的时候需要断开RAPI连接,使用如下函数(选自SDK文档):
| Function | Description |
| CeRapiUninit (RAPI) | 销毁Windows CE remote application-programming interface (RAPI). |
| [C#.NET] using System; |
|
|
文件操作的函数有很多,基本思路都是一样的,在这里就不一一举例了。请注意文件句柄使用以后一定要释放。
我们再看一个取系统信息的例子,RAPI提供了一些取系统信息的函数(选自SDK文档,本人翻译):
| Function | Description |
| CeGetSystemInfo | 返回当前系统信息 |
| CeGetSystemMetrics | 获取Windows元素的尺寸和系统设置 |
| CeGetVersionEx | 获取当前运行的操作系统版本的扩展信息 |
| CeGetSystemPowerStatusEx | 获取电池状态 |
| CeGlobalMemoryStatus | 获取系统物理内存和虚拟内存信息 |
| CeGetStoreInformation | 获取存储器信息并填入STORE_INFORMATION结构 |
| [C#.net] public class RAPI
|
RAPI可以做的事情还有很多,比如取注册表信息,提供对 Microsoft ActiveSync 底层功能的访问,运行远程应用程序,文件列表等等。只要仔细阅读SDK文档,相信都不是难事。
作为Mobile设备的桌面管理程序,备份通话记录,联机发送短信等功能是必不可少的。在我刚发现RAPI的时候,以为和前面的例子一样,有现成的函数可以使用。仔细研究以后才发现要复杂的多。相信这是很多朋友的希望实现的功能,所以班门弄斧,简述如下。
RAPI并没有提供通话,SIM卡和短信方面的函数,它们分别包含在SmartPhone SDK的Phone API,SIM Manager和Short Message Service中。然而包含这些API的phone.dll,cellcore.dll和sms.dll都是储存在设备上的,在Windows上运行的程序是无法调用存储在远程设备上的动态连接库的。
我们仍然需要RAPI。虽然它没有提供直接访问通话记录和短信方面的操作,但是它提供了一个特殊的函数:
| Function | Description |
| CeRapiInvoke | 使用一种通用的机制执行远程程序 |
CeRapiInvoke的原型如下:
| STDAPI_( HRESULT ) CeRapiInvoke( |
CeRapiInvoke将允许我们调用远程设备中的任何API函数!不过不是直接调用,仍然需要对远程API进行一些“包装”。由于时间关系,我将在不久的将来为大家献上关于CeRapiInvoke的详细说明。
165

被折叠的 条评论
为什么被折叠?



