使用RAPI库操作移动设备资料_第1页
使用RAPI库操作移动设备资料_第2页
使用RAPI库操作移动设备资料_第3页
使用RAPI库操作移动设备资料_第4页
使用RAPI库操作移动设备资料_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用RAPI库操作移动设备C#语言描述Windows Mobile日益成熟,开发者队伍也越来越壮大。作为一个10年的计算机热爱者和程序员,我也经受不住新技术的诱惑,倒腾起Mobile这个玩具。Mobile和Windows的血缘关系决定了它在Windows程序员中的受欢迎程度,在网络上随便搜索一下, 关于Mobile应用、开发的文章数不胜数。可是对于计划开发一款全能的 DesktopDevice同步管理程序的我来说,却发现资源少得可怜一一仅仅在MSDN和两个国外的Developer网站上发现了一点资料。现在我仍然在搜索学习中,在这里把我迄今掌握的一点心得 写出来,希望能起到抛砖引玉的功效。另请各

2、位高手指正。Mobile的开发资源很繁杂,很多人常常弄不清究竟要安装哪些工具才能搭建出合适的开发环境。但是我相信 Microsoft SMARTPHONE 2003 SDK 和 Microsoft POCKETPC 2003 SDK 是所有的人都知道的, 它们 分别为SmartPhone和PocketPC提供了必不可少的支持。兄弟我至今没有做出什么成绩,囊中羞涩,好容 易攒了台 SmartPhone,今天就已 Microsoft SMARTPHONE 2003 SDK 为例吧。SMARTPHONE SDK 包含了大量的 API,列表如下(选自 SDK文档):Smartpho ne APIDes

3、cripti onActiveS ync创建移动应用程序安装和配置,同步服务模块,过滤器和协助 访问ActiveSync服务的应用。Bluetooth API创建支持蓝牙设备的 Mobile应用程序,比如耳机,打印机和其 他移动设备。CE Messagi ng (CEMAPI)创建 messaging applicationsCon figuratio n Service Providers创建可配置各种 CSPs( Configuration Service Providers )的应用Conn ecti on Man ager创建可自动管理移动设备网络连接的应用Control API在你的

4、移动应用程序中使用Smartphone控件Device Man ageme nt API创建可远程访问移动设备配置管理的应用程序Game API (GAPI)创建高性能的实时游戏Home Scree n API创建用户界面插件HTML Co ntrol创建可显示 HTML文本和嵌入图片,解析XML和绑定URL到 别名的应用程序MIDI创建可播放MIDI文件的应用程序Object Excha nge (OBEX)创建对象交换应用,允许移动设备自由的通过无线交换数据Pocket Outlook Object Model (POOM) API创建可操作收件箱部件(联系人,日历和任务)的移动应用程 序

5、Projects Con trol创建可以和Projects Control交互的应用Remote API (RAPI)创建可以同步或控制移动设备的桌面应用程序Speech Recog ni zer为应用程序增加语音识别功能(比如语音拨号)Teleph ony创建支持电话和短信的应用程序User In terface管理输入面板,增加用户界面兀素到你的移动应用程序Vibrate API为你的移动应用程序增加震动特性Voice Recorder Con trol创建移动数字录音程序Win dows User In terface Con trols创建将移动扩展合并到标准Microsoft? W

6、in dows? CE 用户界面控件的应用要创建 DesktopDevice的桌面同步管理程序, 主要就依靠 SDK API中的Remote API (RAPI)。RAPI 库由一组函数组成,这些函数可用于通过桌面应用程序管理设备,包括设备的目录文件、设备的注册表和 系统信息。废话不多说,我们先来看看如何管理设备中的目录文件。RAPI提供了一组文件管理的方法(不完全列表,详见SDK文档。):FunctionDescriptio nCeCopyFile复制文件CeCreateDirectory创建目录CeCreateFile创建,打开文件、管道、通讯资源、磁盘设备或者控制台。返 回一个句柄用来访

7、问对象。CeDeleteFile删除文件CeFi ndAIIFiles从指定的 Windows CE目录中获取所有文件和目录的信息,并 且复制到一个包含 CE_FIND_DATA结构的数组中CeFin dFirstFile在目录中查找匹配给定文件名的一个文件CeFi ndClose关闭指定的查找句柄,CeFindFirstFile和CeFindNextFile函数用 这个句柄查找文件CeFi ndNextFile从上一次访问的CeFindFirstFile继续查找文件CeGetFileAttributes返回指疋文件或目录的属性CeGetFileSize获取指疋文件的子节大小CeGetFile

8、Time获取文件创建日期时间,最后访问日期时间和最后修改日期时 间CeMoveFile移动(重命名)一个文件或者目录CeReadFile从文件指针处读取文件数据CeWriteFile从文件指针处写入文件数据首先要说明的是,任何 RAPI操作都需要首先初始化与设备的连接:FunctionDescriptio nCeRapiI nit (RAPI)仓U建 Win dows CE remote applicati on-program ming in terface (RAPI).C#.NETusing System;using System.Ru ntime .In teropServices;

9、public class RAPIpublic void RapiI nit()int ret = CeRapiInit();if( ret != 0)/连接失败,获取失败代码int e = CeRapiGetError();/抛出异常Marshal.ThrowExcepti onF orHR(ret);/连接成功/ To DoDlllmport(rapi.dll, CharSet=CharSet.Unicode) in ternal static extern int CeRapiGetError();DllImport(rapi.dll, CharSet=CharSet. Un icode

10、) in ternal static extern int CeRapiI nit();连接建立后,就可以进行文件操作了。看一个将文件复制到设备的例子:C#.NETusing System;using System.Ru ntime .In teropServices;using Syste m.IO;public class RAPItprivate con st uint GENERIC_WRITE = 0x40000000;/ 设置读写权限private con st short CREATE_NEW = 1;/ 创建新文件private con st short FILE_ATTRIB

11、UTE_NORMAL = 0x80;/ 设置文件属性private const short INVALID_HANDLE_VALUE = -1;/ 错误句柄In tPtr remoteFile = In tPtr.Zero;String LocalFileName = c:test.txt; / 本地计算机文件名String RemoteFileName = My Documentstest.txt;/ 远程设备文件名byte buffer = new byte0x1000;/ 传输缓冲区定义为4kFileStream localFile;int bytesread = 0;int bytes

12、written = 0;int filepos = 0;public RapiFile()/创建远程文件remoteFile = CeCreateFile(RemoteFileName, GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);/检查文件是否创建成功if (i nt)remoteFile = INVALID HANDLE VALUE)throw new Exceptio n(Could not create remote file);/打开本地文件localFile = new FileStream(LocalFil

13、eName, FileMode.Ope n);/读取4K字节bytesread = localFile.Read(buffer, filepos, buffer.Le ngth);while(bytesread 0)/移动文件指针到已读取的位置filepos += bytesread;/写缓冲区数据到远程设备文件if(! Con vert.ToBoolea n( CeWriteFile(remoteFile, buffer, bytesread,ref byteswritte n, 0) /检查是否成功,不成功关闭文件句柄,抛岀异常CeCloseHa ndle(remoteFile);thro

14、w new Exception(Could not write to remote file);try/重新填充本地缓冲区bytesread = localFile.Read(buffer, 0, buffer.Le ngth);catch(Excepti on)bytesread = 0;/关闭本地文件localFile.Close();/关闭远程文件CeCloseHa ndle(remoteFile);/声明要引用的 APIDlllmport(rapi.dll, CharSet=CharSet.Unicode)in ternal static extern int CeCloseHa nd

15、le(I ntPtr hObject);DllImport(rapi.dll, CharSet=CharSet. Un icode)in ternal static extern int CeWriteFile(I ntPtr hFile, byte lpBuffer,int n NumberOfbytesToWrite, ref i nt lpNumberOfbytesWritte n, int lpOverlapped);Dlllmport(rapi.dll, CharSet=CharSet.Unicode, SetLastError=true) internal static exter

16、 n In tPtr CeCreateFile(stri ng lpFileName,uint dwDesiredAccess,int dwShareMode,int lpSecurityAttributes,int dwCreati on Dispositi on,int dwFlagsA ndAttributes,int hTemplateFile);操作完毕后在合适的时候需要断开RAPI连接,使用如下函数(选自 SDK文档):FunctionDescriptio nCeRapi Unin it (RAPI)销毁 Win dows CE remote applicati on-progra

17、m ming in terface (RAPI).C#.NETusing System;using System.Ru ntime .In teropServices;public class RAPI Unin itIpublic RAPIU nin it()CeRapi Unin it();/声明要引用的 APIDllImport(rapi.dll, CharSet=CharSet. Un icode) in ternal static extern int CeRapi Unin it();文件操作的函数有很多,基本思路都是一样的,在这里就不一一举例了。请注意文件句柄使用以后一 定要释放

18、。我们再看一个取系统信息的例子,RAPI提供了一些取系统信息的函数(选自SDK文档,本人翻译)FunctionDescriptio nCeGetSystemI nfo返回当前系统信息CeGetSystemMetrics获取Windows兀素的尺寸和系统设置CeGetVers ionEx获取当前运行的操作系统版本的扩展信息CeGetSystemPowerStatusEx获取电池状态CeGlobalMemoryStatus获取系统物理内存和虚拟内存信息CeGetStoreI nformatio n获取存储器信息并填入 STORE INFORMA TION结构C#.n et)ublic class

19、RAPISYSTEM_INFO si; / 系统信息OSVERSIONINFO versionlnfo; / 版本信息SYSTEM_POWER_STATUS_EX PowerStatus; /电源信息MEMORYSTATUS ms; / 内存信息String info;public void systemI nfo()/检索系统信息tryCeGetSystemI nfo(out si);catch(Excepti on)throw new Exception(Error retrieving system info.);/检索设备操作系统版本号。bool b;设置为结构大小,否则将从缓存中获得

20、versio nln fo.dwOSVersio nln foSize = Marshal.SizeOf(typeof(OSVERSIONINFO); /b = CeGetVers ion Ex(out vers ionln fo);if(!b)throw new Exception(Error retrieving version information.);/检索设备电源状态tryCeGetSystemPowerStatusEx(out PowerStatus, true); / true表示读取最新的电源信息catch(Excepti on)throw new Exceptio n(Er

21、ror retriev ing system power status.);/检索设备内存状态CeGlobalMemoryStatus( out ms );/设置检索信息的格式。info = The conn ected device has an ;switch (si.wProcessorArchitecture)case ProcessorArchitecture .In tel:info += I ntel processor. n;break;case ProcessorArchitecture.MIPS:info += MIPS processor.n;break;case Pro

22、cessorArchitecture.ARM:info += ARM processor.n;break;default:info = unknown processor type. n;break;info += OS vers ion: + versi onln fo.dwMajorVers ion + . + vers ionln fo.dwM in orVersi on + . +vers ionln fo.dwBuildNumber + n;if (PowerStatus.ACLi neStatus = 1)info += On AC power:YESn;elseinfo += O

23、n AC power:NO n;info += Battery level: + PowerStatus.BatteryLifePerce nt + %n;info += Total memory: + Stri ng.Format(0:#,#,#,ms.dwTotalPhys) +n;/显示结果。Co nsole.WriteLi ne(i nfo);#region声明API,详见SDK文档DllImport(rapi.dll, CharSet=CharSet.U ni code, SetLastError=true)in ternal static extern int CeGetSyste

24、mI nfo(out SYSTEM_INFO pSI);DllImport(rapi.dll, CharSet=CharSet.U ni code, SetLastError=true)in ternal static extern bool CeGetVersio nEx(out OSVERSIONINFO lpVersio nln formatio n);DllImport(rapi.dll, CharSet=CharSet.U ni code, SetLastError=true)in ternal static extern bool CeGetSystemPowerStatusEx(

25、out SYSTEM_POWER_STATUS_EX pStatus, bool Update);Dlllmport(rapi.dll, CharSet=CharSet.Unicode, SetLastError=true)in ternal static extern void CeGlobalMemoryStatus(out MEMORYSTATUS msce); #en dregi on#region声明结构IIIIII 处理器架构(CeGetSystemlnfo)IIIpublic enum ProcessorArchitecture : shortIIIIII I ntelIIIIn

26、tel = 0,IIIIII MIPSIIIMIPS = 1,IIIIII AlphaIIIAlpha = 2,IIIIII PowerPCIIIPPC = 3,IIIIII Hitachi SHxIIISHX = 4,IIIIII ARMIIIARM = 5,IIIIII IA64IIIIA64 = 6,/ Alpha 64/Alpha64 = 7,/ Unkn ow n/Unknown = -1/移动设备内存信息/StructLayout(LayoutK in d.Seque ntial) public struct MEMORYSTATUSin ter nal uint dwLe ngt

27、h;/当前内存占用(%)/public int dwMemoryLoad;/物理内存总量/public int dwTotalPhys;/可用物理内存/public int dwAvailPhys;/分页数/public int dwTotalPageFile;/未分页/public int dwAvailPageFile;/虚拟内存总量/public int dwTotalVirtual;/可用虚拟内存/public int dwAvailVirtual;/III移动设备电源信息/public struct SYSTEM_POWER_STATUS_EX/交流电状态/public byte A

28、CLin eStatus;/255 Unknown status/ 电池充电状态。 1 High , 2 Low , 4 Critical , 8 Charging , 128 No system battery ,/public byte BatteryFlag;/电池电量剩余百分比/public byte BatteryLifePerce nt;/保留字段,设置为 0/in ter nal byte Reserved1;/电池电量剩余时间(秒)/public int BatteryLifeTime;/电池充满电的总可用时间(秒)/public int BatteryFullLifeTime

29、;/保留字段,设置为 0/in ter nal byte Reserved2;/后备电池状态/public byte BackupBatteryFlag;/后备电池剩余电量百分比/public byte BackupBatteryLifePerce nt;/保留字段,设置为 0/in ter nal byte Reserved3;III/后备电池电量剩余时间(秒)IIIpublic int BackupBatteryLifeTime;IIIIII后备电池充满电的总可用时间(秒)IIIpublic int BackupBatteryFullLifeTime;IIIIII OSVERSIONINF

30、O platform typeIIIpublic enum PlatformType : intIIIIII Win32 on Win dows CE.IIIVER_PLATFORM_WIN32_CE = 3IIIIII操作系统版本信息IIIpublic struct OSVERSIONINFOin ter nal int dwOSVersio nln foSize;IIIIII主版本信息IIIpublic int dwMajorVersi on;IIIIII副版本信息IIIpublic int dwM ino rVersi on;IIIIII编译信息IIIpublic int dwBuild

31、Number;IIIIII操作系统类型IIIpublic PlatformType dwPlatformId;/III 处理器类型(CeGetSystemlnfo)/public enum ProcessorType : int/ 386/PROCESSOR_INTEL_386 = 386,/ 486/PROCESSOR_INTEL_486 = 486,/ Pen tium/PROCESSOR_INTEL_PENTIUM = 586,/ P2/PROCESSOR_INTEL_PENTIUMII = 686,/ IA 64/PROCESSOR_INTEL_IA64 = 2200,/ MIPS 4

32、000 series/PROCESSOR_MIPS_R4000= 4000,/ Alpha 21064/PROCESSOR_ALPHA_21064= 21064,/ PowerPC 403/PROCESSOR_PPC_403= 403,/ PowerPC 601/PROCESSOR_PPC_601= 601,/ PowerPC 603/PROCESSOR_PPC_603= 603,/Ill PowerPC 604IIIPROCESSOR_PPC_604IllIll PowerPC 620IIIPROCESSOR_PPC_620IllIll Hitachi SH3IllPROCESSOR_HIT

33、ACHI_SH3IllIll Hitachi SH3EIllPROCESSOR_HITACHI_SH3EIllIll Hitachi SH4IllPROCESSOR_HITACHI_SH4IllIll Motorola 821IllPROCESSOR_MOTOROLA_821IllIll Hitachi SH3IllPROCESSOR_SHx_SH3IllIll Hitachi SH4IllPROCESSOR_SHx_SH4IllIll Intel StrongARMIllPROCESSOR_STRONGARMIllIll ARM720IllPROCESSOR_ARM720IllIll ARM

34、820IllPROCESSOR_ARM820IllIll ARM920Ill=604,=620,=10003,=10004,=10005,=821,=103,=104,=2577,=1824,=2080,PROCESSOR_ARM920= 2336,III/ ARM 7IIIPR0CESS0R_ARM_7TDMI= 70001IIIIII CeGetSysteml nfo 的数据结构IIIpublic struct SYSTEM_INFOIIIIII处理器架构IIIpublic ProcessorArchitecture wProcessorArchitecture;IIIIII保留IIIin

35、 ter nal ushort wReserved;IIIIII Specifies the page size and the gra nularity of page protecti on and commitme nt.IIIpublic int dwPageSize;IIIIII应用程序可访问内存地址的最小值III ( Pointer to the lowest memory address accessible to applicationsIII and dyn amic-l ink libraries (DLLs). )IIIpublic int lpM ini mumAppl

36、icati on Address;IIIIII应用程序可访问内存地址的最大值(Pointer to the highest memory addressIII accessible to applications and DLLs.)IIIpublic int lpMaximumApplicati on Address;IIIIII Specifies a mask represe nting the set of processors con figured intoIII the system. Bit 0 is processor 0; bit 31 is processor 31.IIIpublic int dwActiveProcessorMask;IIIIII 处理器数量( Specifies the number of processors in the system.)IIIpublic int dwNumberOfProcessors;IIIIII 处理器类型( Specifies the type of processor in the system./public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论