MapiRule使用心得

2021-09-03 09:55:20 字數 3199 閱讀 3570

前言

關鍵字: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) =;

//...

spropvalue 

*pspvtime 

=null;

//...

hr =

pmsg

->

getprops((sproptagarray *) 

&sptatime, mapi_unicode, 

&cvalues, 

&pspvtime);

if(failed(hr))

//格式化時間

filetime ft;

systemtime sttime;

filetimetolocalfiletime(

&pspvtime 

->

value.ft,

&ft);

filetimetosystemtime(

&ft,

&sttime); 

程序通訊:

這裡採用視窗訊息 wm_copydata方法進行資料傳遞,並且這裡將資料打包成了結構體。

結構體:

typedef 

struct

sms;

傳送方(mapirule):

sms sms;

memset(

&sms,0,

sizeof

(sms));

hwnd pwnd 

=findwindow(null,l

"你主窗體的標題");

if(pwnd 

==null)

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) 

四、注意

1.  如果以安裝的方式部署的mapirule,安裝完之後需要重啟一下,不然可能會截獲不到的情況。

2.  編譯出錯,說是簽名工具問題,關掉mapirule和setupmapirule專案中的證書即可:專案 - authenticode簽名 - 否;或者參照文章1裡面的辦法。

3.  關於如何拷貝安裝包到模擬器上,可以通過共享資料夾或者隨其他工程一起當做檔案來發布到模擬器上。

結束語

ril攔截簡訊在真機上測試失敗, 後來發現很多人都是用mapirule來實現的,現成的例子,順便發現sdk下好多例子,有空打算每乙個都跑一下看看。如果想進一步操作簡訊相關的東西,強烈推薦看完文章1的系列文章。

MapiRule使用心得

一 準備 示例位置 windows mobile 6 sdk samples common cpp win32 mapirule 拷貝乙份出來,用visual studio 2005開啟專案即可。二 工作原理 摘自文章1 mapirule實際上是利用com技術對tmail.exe功能進行擴充套件。像...

frameset 使用心得

欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...

Access使用心得

今天臨時用access做資料庫,長期用sql server開發習慣了,總結一下現在為止用到的比較大的差異,以後有新的再補了 1 返回字串長度 len s lenb s 前者返回字元數,後者返回位元組數,並且access中text型別字元統一為2位元組,與sql2000不同。2 join的使用 acc...