不迎不送,来去自便,无茶无酒,谈笑随缘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Cemapi实战攻略——提纲

by 吴春雷

QQ:819543772

EMail:wuchunlei@163.com

写在前面的话:

         最近正在搞基于Windows Moblie 5.0平台的手机应用程序的开发,其中用到了Cemapi库来开发短信相关应用的模块。由于以前一直在搞业务逻辑方面的开发,因此对cemapi了解的比较少。再开发的过程中,不可避免的遇到了一些问题,也到网上查阅了大量的资料,我惊讶的发现,对于这样一个已经相对成熟的技术,介绍的资料却是那么的稀少和不系统,除了两年前无聊客的《CEmapi 短信开发实例讲解》这篇文章以外,几乎找不到一篇相对系统的介绍cemapi这个库的使用方法的文章。从我在中国的CSDN和美国MSND两大开发论坛上的提问以及问题的反馈速度和质量中也可以看出,国内的大多数手机开发者(指经常活跃再CSDN上的朋友),对Mobile平台上的短信开发技术并没有一个系统和深入的了解。目前网络上,除了MSDN上有一些可供查阅的相关资料意外,国内比较有价值的中文资料就是无聊客的那篇《CEmapi 短信开发实例讲解》,在这里除了对无聊客大侠再参考资料稀缺的情况下能够独立深入研究并创作出这样一篇文章表示仰慕以外,更多的还是感慨,由于资料的不够系统,太多的好东西被开发者们丢弃,太多的开发者走了相同的弯路。本篇文章是以网上已经存在的文章和MSDN上的资料作为基础,相对系统的整理了采用cemapi开发短信应用程序相关技术方面的基础知识,对我本人在开发过程中遇到的问题和解决方法做了一个比较详细的整理,希望能够对WM的开发者有所帮助。当然,任何一篇文章都无法做到对某一个技术的完善收录,这篇文章也不例外,如果本文中有没有提到,但却相对重要的问题,或者再文章中有错误的地方,希望阅读这篇文章的朋友们能够向我指出,我希望这篇文章能够慢慢完善成为Cemapi这个库的白皮书,以方便后来者查阅。我的联系方式如下:

         QQ819543772

         Email:wuchunlei@163.com

         MSN:wuchunlei@163.com

简介:

本文主要介绍了微软提供的cemapi库的使用方法,将网络上所能够收集到的资料做一个相对系统的整理。本文首先介绍了使用cemapi库开发短信应用需要做的准备活动,包括开发环境的选用和搭建,平台SDK的选择和下载,cellular emulator的使用方法,以及如何测试我开发的短信应用等内容。然后分章节对Cemapi中常见常用的对象和接口进行介绍,同时介绍了如何利用这些对象建立与MAPI、短信仓库以及具体信箱的连接,以及如何从具体信箱中获取、建立、移动、拷贝、监视具体信箱中的短信的变化等。最后,文章通过研究和分析WM5.0 SDK中的MapiRule这个例子,实现了对到达短信的拦截操作。大纲列表如下:

写在前面的话:

一.准备工作

1.        开发环境和设备平台

a)         下载和安装

b)           如何使用Cellular emulator测试我的短信应用程序

c)         如果使用的是WM5.0以前版本,我该如何测试我的程序?

2.        如何导入Cemapi

3.        初始化和释放MAPI

4.        本小节的源程序

二.建立与短信信箱的连接

1.       会话接口IMAPISession

2.       如何创建与MAPI的会话

3.       如何终止与短信(邮件)系统的会话,并释放Session对象

4.       短信(邮件)仓库接口IMsgStore

5.       建立与短信仓库的连接

6.       释放IMsgStore对象

7.       与某一具体信箱建立连接,获取具体信箱接口IMAPIFolder对象

8.       释放掉Folder对象

9.       本节所涉及到的源程序

三.操作信箱中的短信息

1.       Windows mobile中短消息的组成

2.       IMessage接口

3.       SizedSPropTagArray

4.       从具体信箱中获取一条原始短消息

5.       释放IMessage对象.

6.       解析原始短消息     

a)         获取正文

b)          获取发送方电话号码

c)         获取接收方电话号码

d)         获取短消息ID

7.       获取短消息ID

8.       在具体信箱中建立一条短消息

a)            建立一条空消息

b)         添加联系人

c)         添加正文,发送方号码和创建时间等属性

d)         最后别忘了SaveChange

e)         为什么我发送的短消息内容写在了主题上而正文却是空的

9.       从具体信箱中删除一条短消息

10.   将短消息移动到某个具体的信箱

11.   InBox中的信息标记为已读或未读

12.   本节所涉及的源程序

四.发送短消息

1.       tmail.exe进程

a)         什么是tmail.exe进程

b)         判断tmail.exe进程是否正在运行

c)         杀掉tmail.exe进程

d)         启动tmail.exe进程

2.       利用tmail.exe发送一条短消息

3.       如何屏蔽掉短信发送后的系统提示信息

4.       源程序

五.监视信箱中短消息的变化

1.                  我有一个问题:如何能够实时的得知系统信箱中短消息的变化,建立循环遍历每个信箱是不是太傻了~~

2.                  使用IMAPIAdviseSink 接口解决这个问题

六.如何拦截到达的短消息

1.       MapiRule是什么?我从哪里能够得到它?

2.       我想先部署到WM6.0平台上看看效果,我该怎么做?

a)         编译MapiRule

b)         如何注册该Com组件(什么是Com组件不再该文章的讨论范围中)

                                       i.              第一种方式:手动想注册表中输入注册信息

                                     ii.              第二种方式:cab安装包中配置inf文件

                                    iii.              第三种方式:调用MapiRule中提供的DllRegisterServer函数

c)         卸载该组件

                                       i.              手动删除注册表信息

                                     ii.              调用MapiRule中提供的DllUnRegisterServer函数

d)         如何确定注册是否成功呢?

e)         如何确定MapiRule.dll已经被tmail进程加载?

f)          测试该组件是否能够正常工作

g)         为什么我已经注册成功了,它却还不工作?

                                       i.              查看GUID是否与别的组件冲突

                                     ii.              证书pfx

                                    iii.              查看注册表中是否有其它程序已经为tmail.exe进程注册过MapiRule

3.       这么多代码,我不知道该从那看起?(别急,我们只需要了解其中几个关键的地方就好)

a)         什么是GUID?如何产生新的GUID

b)         GetClsObject函数

c)         拦截短信的原理是什么?( CMapiClient接口,ProcessMessage方法)

d)         被拦截到的短信跑哪去了?(DeleteMessage方法)

4.       我想再我自己的程序中获取被拦截到的短消息,如何实现呢?

a)         外部程序获取截获消息信息的思路(内存映射文件,三个SMS方法)

b)         微软已经给我提供实现这个思路的部分源程序,可以直接从ReceivingSMS这个Demo中获得。(

c)         如果你是CSharp的开发者,那么恭喜你ReceivingSms就是一个CSharp调用MapiRule拦截短消息的Demo,你可以直接使用了。如果你是C++的开发者,那么我们还需要做些工作。

5.       本小节中涉及的源程序

 

 

posted on 2009-03-08 15:30  wude  阅读(461)  评论(0编辑  收藏  举报