MapiRule使用心得

简介:

一、准备

    示例位置: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.  关于如何拷贝安装包到模拟器上,可以通过共享文件夹或者随其他工程一起当做文件来发布到模拟器上。

本文转自博客园农民伯伯的博客,原文链接:MapiRule使用心得,如需转载请自行联系原博主。

目录
相关文章
|
11月前
|
云安全 弹性计算 负载均衡
阿里云使用心得
上海杉达学院计算机专业史圣琦的阿里云平台使用心得
|
弹性计算 NoSQL Linux
服务器使用心得
我很高兴在这里发表这篇文章,分享我最近如何使用ECS的印象。我是南京邮电大学通达学院软件工程专业的学生,因为目前的学习内容我需要一个稳定和安全的服务器,所以我很想连接到服务器。我找到了ECS。这个服务器使用了我研究过的一些技术,并且通过这个服务器使用ECS。在这个服务器上,使用ECS,并使用Docker来创建项目环境。
|
安全 NoSQL Java
我的使用心得
文章介绍了我此次的体验感受,我觉得这个服务器给我带来了很多的便利,能够帮助一些大学生去了解,体验云服务器。在体验的时间,我体验到了esc的强大,也给我带来了许多惊喜和乐趣。
|
云计算 开发者
使用心得
对于这个飞天计划的感想十分丰富,我觉得有必要分享一点使用心得,对于这个计算机系的学生很有帮助
使用心得
|
弹性计算 监控 JavaScript
阿里云服务使用心得
由于自己首次接触ECS方面的知识,还不是很熟悉,于是查看了7天玩转ECS等相关方面的知识,对ECS有了大致的了解,并且免费领取了为期两周的云服务器,2G,2核,阿里云也真的是很良心了,开发一个网站也已经够用了,在实例中可以查看自己的ip地址,配置,还可以管理由于自己比较熟悉linux操作系统,通过远程连接工具连接云服务器,将自己的博客部署上去,期间遇到无法访问的情况,最后通过在安全组添加即可成功访问,同时在监控页面可以查看cpu使用率、内网带宽等信息,同时自己也根据阿里云对象存储OSS的提供的教材,成功实现了文章图片上传功能。而且我了解的功能只是冰山一角。
|
存储 弹性计算 开发框架
|
JavaScript
gulp入门第一课你需要注意的
gulp入门第一课你需要注意的
|
Java Linux 程序员
阿里云使用心得分享
小白初学Linux,建议使用阿里云
|
小程序 程序员
阿里云的学习使用心得
个人介绍,教学内容,学习心得。
|
弹性计算 Linux 开发工具
我的阿里云使用心得
阿里云ecs服务是十分好用的服务器,强烈推荐大家购买。