MapiRule使用心得

简介:

前言

  关键字:Windows Mobile MapiRule, MapiRule 使用

  关于MapiRule这里就不介绍了,主要介绍一下使用的心得和需要注意的问题。

 

文章

  1.  CMAPI实战攻略(系列文章)   重点是系列文章第六篇    

  2.  自己做的一个简单的短信接收端程序

  3.  Windows Mobile 6 SDK 中的 Cellular Emulator

 

环境

  1.  真机系统:Windows Mobile 6.1

  2.  开发工具:Microsoft Visual Studio 2005

  3.  SDK版本:Windows Mobile 6 SDK

 

正文

  一、准备

    示例位置:Windows Mobile 6 SDK\Samples\Common\CPP\Win32\MapiRule

    拷贝一份出来,用Visual Studio 2005打开项目即可。

 

  二、工作原理[摘自文章1]

    MapiRule实际上是利用COM技术对tmail.exe功能进行扩展。像所有com程序一样,系统提供了一个接 口(协议)来让外部程序实现,外部程序通过实现该接口来为tmail.exe增加新的功能。CMapiClient是一组接口,当短信到达本地设备的时候,系统会调用一系列的函数获取并加载COM组件,然后调用ProcessMessage方法来处理到达的短消息,这个过程由系统实现,除了 ProcessMessage方法以外不需要我们来写任何程序。

    注意其实MapiRule拦截下来的时候,短信已经到达了短信(邮件)仓库,但没有到具体的信箱(如收件箱、发件箱等),所以这里处理完之后,会调用DeleteMessage来删除短信。

 

  三、 使用和代码说明

    3.1  使用说明

      MapiRule的工作机制是基于COM技术的,这里只需要注册该Com组件即可,有三种方法,参加文章一,这里使用安装Cab包的方式注册。编译MapiRule工程,然后编译SetupMapiRule,拷贝在SetupMapiRule\Debug下的SetupMapiRule.CAB和SetupMapiRule.inf两个文件到Windows Mobile模拟器或者真机上安装即可。注意需要重起下系统,到这里为止还没有修改过一行代码,用真机或者Cellular Emulator测试,发送一条短信内容为"zzz"即可,即可看到效果!

    

    3.2  代码说明

      短信内容:  pspvSubject->Value.lpszW   

      短信号码:  pspvEmail->Value.lpszW

      短信时间:  依次对应上面两项加入以下代码即可获取

复制代码

// ...
SizedSPropTagArray( 1 , sptaTime)  =  {  1 , PR_MESSAGE_DELIVERY_TIME};

// ...
SPropValue  * pspvTime  =  NULL;

// ...
hr  =  pMsg -> GetProps((SPropTagArray  * & sptaTime, MAPI_UNICODE,  & cValues,  & pspvTime);
if  (FAILED(hr))
{
    
goto  Exit;
}

// 格式化时间
FILETIME ft;
SYSTEMTIME stTime;
FileTimeToLocalFileTime(
& pspvTime  -> Value.ft, & ft);
FileTimeToSystemTime(
& ft, & stTime); 
复制代码

      进程通讯:

        这里采用窗口消息 WM_COPYDATA方法进行数据传递,并且这里将数据打包成了结构体。

        结构体:

typedef  struct
{
     TCHAR chMobile[
20 ];    // 电话号码
     TCHAR chSubject[ 140 ];  // 短信内容
     SYSTEMTIME SendTime;   // 发送时间
}Sms;

        发送方(MapiRule):

复制代码
    Sms sms;
    memset(
& sms, 0 , sizeof (Sms));

    HWND pWnd 
=  FindWindow(NULL,L " 你主窗体的标题 " );
    
if (pWnd  ==  NULL){
        
goto  Exit;
    }
    wcscpy(sms.chSubject,pspvSubject
-> Value.lpszW);
    wcscpy(sms.chMobile,pspvEmail
-> Value.lpszW);
    sms.SendTime 
=  stTime;

    COPYDATASTRUCT cpd;                     
// 给COPYDATASTRUCT结构赋值
    cpd.dwData  =   0 ;
    cpd.cbData 
=   sizeof (sms);
    cpd.lpData 
=  ( void * ) & sms;

    ::SendMessage(pWnd,WM_COPYDATA,NULL,(LPARAM)
& cpd);
复制代码

        接收方:主窗体消息队列

复制代码
BEGIN_MESSAGE_MAP(CYouWindow, CWnd)
    ON_WM_COPYDATA()
END_MESSAGE_MAP()

BOOL CYouWindow::OnCopyData(CWnd
*  pWnd, COPYDATASTRUCT *   pCopyDataStruct) 
{
    Sms
*  store   =  (Sms * )pCopyDataStruct -> lpData;
}
复制代码

  四、注意

    1.  如果以安装的方式部署的MapiRule,安装完之后需要重启一下,不然可能会截获不到的情况。

    2.  编译出错,说是签名工具问题,关掉MapiRule和SetupMapiRule项目中的证书即可:项目 - Authenticode签名 - 否;或者参照文章1里面的办法。

    3.  关于如何拷贝安装包到模拟器上,可以通过共享文件夹或者随其他工程一起当做文件来发布到模拟器上。

 

结束语

  RIL拦截短信在真机上测试失败, 后来发现很多人都是用MapiRule来实现的,现成的例子,顺便发现SDK下好多例子,有空打算每一个都跑一下看看。如果想进一步操作短信相关的东西,强烈推荐看完文章1的系列文章。.


转载:http://www.cnblogs.com/over140/archive/2010/04/12/1699531.html

目录
相关文章
|
弹性计算 大数据 Linux
飞天加速计划初体验
最近因需要使用云服务器来学习,老师让我们用这个阿里云类进行相关的学习,让我们先进行免费的使用进行学习,慢慢了解,毕竟对于首次接触的事物都是了解为主不会投入大量资金。阿里云平台有详细的教程,让初学者能十分轻松的进行学习。飞天加速计划是个好想法,可以让我们这些学生进行学习,制作出自己的网站。让我在暑假对计算机有了浓厚的兴趣,于是在阿里云我选择了飞天加速计划,学习大数据和服务器啥的,让自己get到更多的知识~
|
4天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101786 0
|
4天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
|
12天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151035 4
|
10天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119990 57
|
11天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103503 8
|
12天前
|
人工智能 Serverless 对象存储
让你的文档从静态展示到一键部署可操作验证
通过函数计算的能力让阿里云的文档从静态展示升级为动态可操作验证,用户在文档中单击一键部署可快速完成代码的部署及测试。这一改变已在函数计算的活动沙龙中得到用户的认可。
120841 218
|
11天前
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
11天前
|
存储 缓存 安全
深度解析JVM世界:JVM内存结构
深度解析JVM世界:JVM内存结构