⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapiex.cpp

📁 在PDA上打开收件箱,要将ReadSMS.dll拷到此程序部署到PDA的目录下
💻 CPP
字号:
#pragma comment(lib,"cemapi.lib")
#pragma comment(lib,"UUID.lib")

#include "MAPIEx.h"
int MAPIEx::cm_nMAPICode=MAPI_UNICODE;
MAPIEx::MAPIEx()
{
	m_pSession=NULL;
	m_pMsgStore=NULL;
	m_pFolder=NULL;	
	m_pContents=NULL;
	m_sink=0;
}

MAPIEx::~MAPIEx()
{
	Logout();
}
BOOL MAPIEx::Init()
{
	if(MAPIInitialize(NULL)!=S_OK) return FALSE;
	return TRUE;
}

void MAPIEx::Term()
{
	MAPIUninitialize();
}

BOOL MAPIEx::Login()
{
	return (MAPILogonEx(NULL,NULL,NULL,NULL,&m_pSession)==S_OK);
}

void MAPIEx::Logout()
{
	//m_pSession->Logoff(0,0,0);
	RELEASE(m_pContents);
	RELEASE(m_pFolder);
	RELEASE(m_pMsgStore);
	RELEASE(m_pSession);
}
BOOL MAPIEx::OpenMessageStore()
{
	if(!m_pSession) return FALSE;

	LPSRowSet pRows=NULL;
	const ULONG nProperties=2;
	SizedSPropTagArray(nProperties,Columns)={nProperties,{PR_ENTRYID, PR_DISPLAY_NAME}};

	BOOL bResult=FALSE;
	IMAPITable*	pMsgStoresTable;
	if(m_pSession->GetMsgStoresTable(MAPI_UNICODE, &pMsgStoresTable)==S_OK) 
	{
		if(pMsgStoresTable->SetColumns((LPSPropTagArray)&Columns, 0)==S_OK)
		{
			while(SUCCEEDED(pMsgStoresTable->QueryRows(1,0,&pRows)))
			{
				if(NULL==pRows||pRows->cRows!=1)
				{
					break;
				}
				if(_tcsicmp(pRows->aRow[0].lpProps[1].Value.lpszW,_T("SMS"))==0)
				{
					ULONG ulMessageType;
					bResult =(m_pSession->OpenEntry(pRows->aRow[0].lpProps[0].Value.bin.cb,(LPENTRYID)pRows->aRow[0].lpProps[0].Value.bin.lpb,NULL, MAPI_BEST_ACCESS, &ulMessageType,(LPUNKNOWN*)&m_pMsgStore)==S_OK);
					FreeProws(pRows);
					break;
				}		
			}
			
		}
		RELEASE(pMsgStoresTable);
	}
	return bResult;
}
LPMAPIFOLDER MAPIEx::OpenFolder(unsigned long ulFolderID,BOOL bInternal)
{
	if(!m_pMsgStore) return NULL;

	LPSPropValue props=NULL;
	ULONG cValues=0;
	DWORD dwObjType;
	ULONG rgTags[]={ 1, ulFolderID };
	LPMAPIFOLDER pFolder;

	if(m_pMsgStore->GetProps((LPSPropTagArray) rgTags, MAPI_UNICODE, &cValues, &props)!=S_OK) return NULL;
	hr =m_pMsgStore->OpenEntry(props[0].Value.bin.cb,(LPENTRYID)props[0].Value.bin.lpb, NULL, m_ulMDBFlags, &dwObjType,(LPUNKNOWN*)&pFolder);
	MAPIFreeBuffer(props);

	if(pFolder && bInternal) {
		RELEASE(m_pFolder);
		m_pFolder=pFolder;
	}
	return pFolder;
}
LPMAPIFOLDER MAPIEx::OpenSpecialFolder(unsigned long ulFolderID,BOOL bInternal)
{
	LPMAPIFOLDER pInbox=OpenInbox(FALSE);
	if(!pInbox || !m_pMsgStore) return FALSE;

	LPSPropValue props=NULL;
	ULONG cValues=0;
	DWORD dwObjType;
	ULONG rgTags[]={ 1, ulFolderID };
	LPMAPIFOLDER pFolder;

	if(pInbox->GetProps((LPSPropTagArray) rgTags, MAPI_UNICODE, &cValues, &props)!=S_OK) return NULL;
	m_pMsgStore->OpenEntry(props[0].Value.bin.cb,(LPENTRYID)props[0].Value.bin.lpb, NULL, m_ulMDBFlags, &dwObjType,(LPUNKNOWN*)&pFolder);
	MAPIFreeBuffer(props);
	RELEASE(pInbox);

	if(pFolder && bInternal) {
		RELEASE(m_pFolder);
		m_pFolder=pFolder;
	}
	return pFolder;
}
LPMAPIFOLDER MAPIEx::OpenInbox(BOOL bInternal)
{
	if(!m_pMsgStore) return NULL;
	return OpenFolder(PR_CE_IPM_INBOX_ENTRYID,bInternal);
}
LPMAPIFOLDER MAPIEx::OpenOutbox(BOOL bInternal)
{
	return OpenFolder(PR_IPM_OUTBOX_ENTRYID,bInternal);
}

LPMAPIFOLDER MAPIEx::OpenSentItems(BOOL bInternal)
{
	return OpenFolder(PR_IPM_SENTMAIL_ENTRYID,bInternal);
}

LPMAPIFOLDER MAPIEx::OpenDeletedItems(BOOL bInternal)
{
	return OpenFolder(PR_IPM_WASTEBASKET_ENTRYID,bInternal);
}
LPMAPIFOLDER MAPIEx::OpenDrafts(BOOL bInternal)
{
	return OpenSpecialFolder(PR_IPM_DRAFTS_ENTRYID,bInternal);
}
BOOL MAPIEx::GetContents(LPMAPIFOLDER pFolder)
{
	if(!pFolder) {
		pFolder=m_pFolder;
		if(!pFolder) return FALSE;
	}
	RELEASE(m_pContents);
	if(pFolder->GetContentsTable(MAPI_UNICODE,&m_pContents)!=S_OK) return FALSE;

	const int nProperties=MESSAGE_COLS;
	SizedSPropTagArray(nProperties,Columns)={nProperties,{PR_MESSAGE_FLAGS, PR_ENTRYID }};
	return (m_pContents->SetColumns((LPSPropTagArray)&Columns,0)==S_OK);
}
int MAPIEx::GetRowCount()
{
	ULONG ulCount;
	if(!m_pContents || m_pContents->GetRowCount(0,&ulCount)!=S_OK) return -1;
	return ulCount;
}
LPCTSTR MAPIEx::GetValidString(SPropValue& prop)
{
	LPCTSTR s=prop.Value.LPSZ;
	return s;
}
BOOL MAPIEx::GetNextMessage(SmsMessage& message,BOOL bUnreadOnly)
{
	if(!m_pContents) return FALSE;
	
	DWORD dwMessageFlags;
	LPSRowSet pRows=NULL;
	BOOL bResult=FALSE;
	while(m_pContents->QueryRows(1,0,&pRows)==S_OK) {
		if(pRows->cRows) {
			dwMessageFlags=pRows->aRow[0].lpProps[PROP_MESSAGE_FLAGS].Value.ul;
			if(bUnreadOnly &&  dwMessageFlags&MSGFLAG_READ) {
				FreeProws(pRows);
				continue;
			}
			bResult=message.Open(this,pRows->aRow[0].lpProps[PROP_ENTRYID].Value.bin,dwMessageFlags);
		}
		FreeProws(pRows);
		break;
	}
	MAPIFreeBuffer(pRows);
	return bResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -