`
guowee
  • 浏览: 176769 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mobile read sms 透過MAPI

阅读更多

转载自【http://sheng-yung.blogspot.com/2008/03/mobile-read-sms-mapi.html】

許多人可能再透過smsopen要讀取sms簡訊時

hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_RECEIVE , &hSMS,
&hMsgAvailable);

可能碰過說系統僅能存在一個實體來存取,我想應該是系統內預設的簡訊收件夾
那麼這時候要讀取簡訊就要透過MAPI來連取收件夾 讀取其內容

底下範例參考 microsoft mobile blog
僅提供讀取功能 而無NOTIFICATION

-------------------------------------------------------
設定 連接 cemapi.lib
-------------------------------------------------------
#include
#include
#include
#include

HRESULT SaveMessages(IMsgStore *pStore, LPCTSTR pszFilename); //讀取收件夾
HRESULT SaveSmsMessages(IMAPISession *pSession, LPCTSTR pszFilename); //開啟收件夾實體

HRESULT SaveSmsMessages(IMAPISession *pSession, LPCTSTR pszFilename)
{
static const SizedSPropTagArray (2, spta) = { 2, PR_DISPLAY_NAME, PR_ENTRYID };

HRESULT hr;
SRowSet *prowset = NULL;
CComPtr

ptbl;
CComPtr pStore;

// Get the table of accounts
hr = pSession->GetMsgStoresTable(0, &ptbl);
//CHR(hr);

// set the columns of the table we will query
hr = ptbl->SetColumns((SPropTagArray *) &spta, 0);
//CHR(hr);

while (TRUE)
{
// Free the previous row
FreeProws (prowset);
prowset = NULL;

hr = ptbl->QueryRows (1, 0, &prowset);
if ((hr != S_OK) || (prowset == NULL) || (prowset->cRows == 0))
break;

ASSERT (prowset->aRow[0].cValues == spta.cValues);
SPropValue *pval = prowset->aRow[0].lpProps;

ASSERT (pval[0].ulPropTag == PR_DISPLAY_NAME);
ASSERT (pval[1].ulPropTag == PR_ENTRYID);

if (!_tcscmp(pval[0].Value.lpszW, TEXT("SMS")))
{
// Get the Message Store pointer
hr = pSession->OpenMsgStore(0, pval[1].Value.bin.cb, (LPENTRYID)pval[1].Value.bin.lpb, 0, 0, &pStore);
//CHR(hr);

SaveMessages(pStore, pszFilename);
}
}

Error:
FreeProws (prowset);
return hr;
}

HRESULT SaveMessages(IMsgStore *pStore, LPCTSTR pszFilename)
{
static const SizedSSortOrderSet(1, sortOrderSet) = { 1, 0, 0, { PR_MESSAGE_DELIVERY_TIME, TABLE_SORT_DESCEND } };
static const SizedSPropTagArray (3, spta) = { 3, PR_SENDER_NAME, PR_SUBJECT, PR_MESSAGE_DELIVERY_TIME };
HRESULT hr = S_OK;
LPENTRYID pEntryId = NULL;
ULONG cbEntryId = 0;
CComPtr pFolder;
CComPtr ptbl;
ULONG ulObjType = 0;
SRowSet *prowset = NULL;

// 1 First retrieve the ENTRYID of the Inbox folder of the message store
// Get the inbox folder
hr = pStore->GetReceiveFolder(NULL, MAPI_UNICODE, &cbEntryId, &pEntryId, NULL);
//CHR(hr);

// 2 we have the entryid of the inbox folder, let's get the folder and messages in it
hr = pStore->OpenEntry(cbEntryId, pEntryId, NULL, 0, &ulObjType, (LPUNKNOWN*)&pFolder);
//CHR(hr);
ASSERT(ulObjType == MAPI_FOLDER);

// 3 From the IMAPIFolder pointer, obtain the table to the contents
hr = pFolder->GetContentsTable(0, &ptbl);
//CHR(hr);

// 4 Sort the table that we obtained. This is determined by the sortOrderSet variable
hr = ptbl->SortTable((SSortOrderSet *)&sortOrderSet, 0);
//CHR(hr);

// 5 Set the columns of the table we will query. The columns of each row are determined by spta
hr = ptbl->SetColumns ((SPropTagArray *) &spta, 0);
//CHR(hr);

// now iterate through each message in the table
while (TRUE)
{
// Free the previous row
FreeProws (prowset);
prowset = NULL;

hr = ptbl->QueryRows (1, 0, &prowset);
if ((hr != S_OK) || (prowset == NULL) || (prowset->cRows == 0))
break;

ASSERT (prowset->aRow[0].cValues == spta.cValues);
SPropValue *pval = prowset->aRow[0].lpProps;

// 6 Get the three properties we need: Sender name, Subject, and Delvery time.
ASSERT (pval[0].ulPropTag == PR_SENDER_NAME);
ASSERT (pval[1].ulPropTag == PR_SUBJECT);
ASSERT (pval[2].ulPropTag == PR_MESSAGE_DELIVERY_TIME);

LPCTSTR pszSender = pval[0].Value.lpszW;
LPCTSTR pszSubject = pval[1].Value.lpszW;
SYSTEMTIME st = {0};
FileTimeToSystemTime(&pval[2].Value.ft, &st);

// 7 Pass the parameters to a function to archive (this function is not written)
//hr = AppendToFile(pszFilename, pszSender, pszSubject, st);
AfxMessageBox(pszFilename);
AfxMessageBox(pszSender);
AfxMessageBox(pszSubject);
//CHR(hr);
}

Error:
FreeProws (prowset);
MAPIFreeBuffer(pEntryId);
return hr;
}

//按鈕按下即開始讀取
//事先必須先初始化建立MAPI, 最後並關閉
void CSYDlg::OnBnClickedButton1()
{
HRESULT hr;
ICEMAPISession * pSession = NULL;

hr = MAPIInitialize(NULL);
hr = MAPILogonEx(0, NULL, NULL, 0, (LPMAPISESSION *)&pSession);

SaveSmsMessages(pSession, L"TestFileName");

hr = pSession->Logoff(0, 0, 0);

pSession->Release();
pSession = NULL;
MAPIUninitialize();
}

分享到:
评论

相关推荐

    MAPI.rar_mapi_mobile_mobile sms_sms_短信

    这个“MAPI.rar_mapi_mobile_mobile sms_sms_短信”可能是一个包含有关如何在mobile平台上读取短信详细信息的文档资源。 开发步骤通常涉及以下几个关键环节: 1. **环境搭建**:首先,你需要一个支持MAPI的开发...

    MAPI .net cf

    在.NET Compact Framework环境下,开发针对Windows Mobile等移动设备的软件时,也需要处理邮件功能,这就需要用到MAPI的C#封装。 本文将详细介绍如何在.NET Compact Framework中使用MAPI .NET CF,以及提供的文件...

    MAPI_Test.zip_visual c

    《Windows Mobile SMS编程实践——基于Visual C++的MAPI接口详解》 在移动开发领域,尤其是在Windows Mobile系统中,发送和接收SMS(Short Message Service,短信)是常见的功能需求。本篇文章将深入探讨如何利用...

    Inside MAPI

    根据提供的标题、描述和部分内容,本文将重点解析与MAPI(Messaging Application Programming Interface)相关的知识点。MAPI是一种由Microsoft开发的API集,主要用于与电子邮件客户端和服务器进行交互,特别是...

    Demo - Extended MAPI in Delphi 2010

    "Demo - Extended MAPI in Delphi 2010" 这个标题和描述指向了一个特定的示例项目,它展示了如何在Delphi 2010编程环境中使用Extended MAPI(扩展的MAPI)技术。Extended MAPI是Microsoft的一项技术,允许应用程序...

    使用 MAPI 实现邮件发送.docx

    "使用 MAPI 实现邮件发送" 一、简述 使用 MAPI(Messaging Application Programming Interface)可以实现邮件发送功能。在本文中,我们将使用 Simple MAPI,这是一个子集,提供了一组易于使用的函数和相关数据结构...

    在MFC程序中用MAPI发送邮件

    在MFC(Microsoft Foundation Classes)程序中使用MAPI(Messaging Application Programming Interface)发送邮件是一种常见的技术,对于熟悉C++编程的开发者来说,这是一种便捷的实现邮件功能的方式。MAPI是微软...

    MAPI接口编程技术[归类].pdf

    MAPI接口编程技术 MAPI(Messaging Application Program Interface)是Microsoft提供的一种电子邮件程序接口,允许开发者使用Outlook Express系统进行电子邮件的发送和接收。该接口提供了一些基本的电子邮件处理...

    MAPI.rar_mapi

    **MAPI(Messaging Application Programming Interface)**是一种在Windows操作系统中广泛使用的邮件和消息传递应用程序接口。它允许开发者创建能够与各种邮件系统交互的应用程序,包括发送、接收、存储和管理邮件。...

    精彩编程与编程技巧-用 MAPI 控件实现发送邮件...

    ### 使用MAPI控件实现邮件发送的技术要点 在IT领域,特别是软件开发中,通过编程技术来实现自动化邮件发送是一项非常实用且常见的功能。本文将详细介绍如何利用Microsoft Application Programming Interface (MAPI)...

    MAPI.rar_MA_mapi

    **MAPI(Messaging Application Programming Interface)**是一种在Windows操作系统中用于构建邮件应用程序的接口,它允许程序员通过系统级服务直接与邮件服务器通信。MAPI提供了一套标准的API,使得开发者能够实现...

    mapi.zip_mapi

    标题 "mapi.zip_mapi" 暗示了这个压缩包与MAPI(Messaging Application Programming Interface)有关,它是一个在Microsoft Windows操作系统上广泛使用的API,用于处理电子邮件和消息系统。MAPI允许应用程序发送和...

    Internet与WEB服务源代码_simple_mapi_demo

    标题中的“Internet与WEB服务源代码_simple_mapi_demo”指的是一个关于互联网技术和Web服务的源码示例,其中“simple_mapi_demo”可能是这个示例的特定部分,它可能涉及了简单邮件传输协议(MAPIMail)的实现。...

    使用 MAPI 控件发送邮件(7KB)...

    2. **设置MAPI控件属性**:在设计视图中,对添加的MAPI控件设置属性,如`MAPI.Logon`用于登录邮件系统,`MAPI.Session`获取邮件会话,`MAPI.Recipients`设置收件人,`MAPI.Subject`设置邮件主题,`MAPI.Body`设置...

    MAPI Accessor for .NET 2.3

    Use this free .NET component to access low-level features provided by MAPI in Windows Forms applications as well as in .NET-based Outlook COM add-ins. The component is a mixture of managed and ...

    MFCMAPI.RAR_Exchange mapi_mapi

    MFCMAPI是一款基于Microsoft Foundation Class (MFC) 库实现的MAPI(Messaging Application Programming Interface)参考应用程序。它主要用于连接到Exchange服务器,通过MAPI接口进行邮件、日历、联系人等信息的...

    MAPI客户程序(应用程序中发送邮件)

    **MAPI(Messaging Application Programming Interface)是微软提供的一种标准接口,用于在应用程序中实现电子邮件的发送和接收。这种接口允许开发者直接与邮件服务器通信,从而创建具有邮件功能的应用程序。** 在...

    用MAPI发送邮件(4KB)...

    在VB(Visual Basic)编程中,使用MAPI(Messaging Application Programming Interface)发送邮件是一种常见的方法。MAPI允许程序与电子邮件系统进行交互,如Outlook,从而实现自动化发送邮件的功能。以下将详细介绍...

    用MAPI控件批量发送文件(10KB)...

    本主题聚焦于利用VB中的MAPI(Messaging Application Programming Interface)控件来实现批量发送文件,特别是10KB大小的文件。MAPI控件是Windows操作系统提供的一种接口,它允许应用程序与邮件系统进行交互,包括...

    CE MAPI实例讲解

    CE MAPI,全称为Consumer Electronics Message Access Protocol,是微软提供的一种用于访问电子邮件、日历和其他个人信息管理(PIM)数据的接口。在Windows CE系统中,它允许开发者通过编程方式访问和操作邮件系统,如...

Global site tag (gtag.js) - Google Analytics