HTML Tags and JavaScript tutorial
(原创)CE MAPI实例讲解
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
ox里的所有消息(二)》">To dao21hao:通过拿IMessage::GetProps拿PR_ENTRYID属性的值,获取EntryID,然后传给 IMAPIFolder::DeleteMessages进行删除
yzx0023:
To balial: Notification支持HTML,所以你只需要书写一段HTML,并放好需要显示的图片即可
dao21hao:
请问一下,按照片上面的步骤,获得了短信对象IMessage后,想要删除这条短信应怎么设置DeleteMessages()的参数呢?
balial:
无聊客您好,看您文章中提到“以后有空将继续介绍如何在Notification里显示图片以及如何在系统Setting里面添加自定义Notification管理项”我现在正在作相关的东西,但是无从下手,能不能请您有空的时候大概讲解一下原理和相关资料,谢谢
上一篇: Pocket PC & Smartphone 短信图标轻松换(By 无聊客)
|
下一篇: (原创)CE MAPI实例讲解 --- 设置Message附件(七)
function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
(原创)CE MAPI实例讲解 --- 读取Message附件(八)
在上一篇里面讲述了如何为一条
MESSAGE
设置附件,下面将继续关于附件的话题,利用上一个例子,我们接下来来看看如何获取一条
MESSAGE
的附件信息。下面将通过两个帮助函数来完成:
BOOL MAPIHelp_SaveAttachFile( LPATTACH pAttach, LPCTSTR szFile )
作用:读取单个附件文件内容,并保存到指定位置
pAttach:
附件对象
szFile:
保存文件名
BOOL MAPIHelp_GetAttachment( IMessage* pMsg, LPCTSTR szFilePath )
作用:获取一条
Message
的全部附件,并保存到指定目录下
pMsg:
目标消息对象
szFilePath:
目标目录
下面来看看具体实现:
BOOL MAPIHelp_SaveAttachFile( LPATTACH pAttach, LPCTSTR szFile )
{
if
( NULL == pAttach || NULL == szFile )
return
FALSE;
HANDLE
hFile
= INVALID_HANDLE_VALUE;
IStream*
pstmAttachment
= NULL;
char
*
pBuffer
= NULL;
int
i
= 0;
DWORD
dwWrite
= 0;
BOOL
bRet
= FALSE;
ULONG
ulRead
= 0;
//
打开附件,获取
IStream
对象,用于获取文件内容,根据
MSDN
的解释,这里只支持
PR_ATTACH_DATA_BIN
属性。
if
(FAILED(pAttach->OpenProperty (PR_ATTACH_DATA_BIN, NULL, STGM_READ, MAPI_MODIFY,
reinterpret_cast
<IUnknown **> (&pstmAttachment))))
{
goto
EXIT;
}
//
创建目标文件
hFile = ::CreateFile(szFile, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if
(INVALID_HANDLE_VALUE == hFile)
{
goto
EXIT;
}
//
缓冲区,用于文件拷贝
pBuffer
=
new
char
[4096];
if
(NULL == pBuffer)
{
goto
EXIT;
}
//
附件内容拷贝
while
(SUCCEEDED(pstmAttachment->Read(pBuffer, 4096, &ulRead)))
{
if
(ulRead <= 0)
break
;
::WriteFile(hFile, pBuffer, ulRead, &dwWrite, NULL);
}
bRet
= TRUE;
EXIT:
if
(INVALID_HANDLE_VALUE != hFile)
{
::CloseHandle(hFile);
}
if
(NULL != pBuffer)
{
delete
[]pBuffer;
}
if
(NULL != pstmAttachment)
{
pstmAttachment->Release();
}
return
bRet;
}
BOOL MAPIHelp_GetAttachment( IMessage* pMsg, LPCTSTR szFilePath )
{
if
( NULL == pMsg || NULL == szFilePath )
return
FALSE;
LPMAPITABLE pAttachTbl
= NULL;
SRowSet*
psrs
= NULL;
LPATTACH
pAttach
= NULL;
LONG
lAttachNum
= 0;
BOOL
bRet
= FALSE;
//
获取附件列表
if
(FAILED(pMsg->GetAttachmentTable(0, &pAttachTbl)))
{
goto
EXIT;
}
//
接下来的查询过程是不是很眼熟?
while
(SUCCEEDED(pAttachTbl->QueryRows (1, 0, &psrs)))
{
//
即使查询返回成功,可能记录数也为
0
,需要排除这种
CASE
if
(NULL == psrs || psrs->cRows != 1)
{
break
;
}
TCHAR szFile[MAX_PATH];
//
遍历所有属性,找出附件
ID
和名称
for
(
int
i = 0; i < (
int
)(psrs->aRow[0].cValues); ++i)
{
if
(PR_ATTACH_NUM == psrs->aRow[0].lpProps[i].ulPropTag)
{
//
找到附件
ID
,并打开附件对象
if
(FAILED(pMsg->OpenAttach(psrs->aRow[0].lpProps[i].Value.l,
NULL,
MAPI_BEST_ACCESS,
&pAttach)))
{
goto
EXIT;
}
lAttachNum = psrs->aRow[0].lpProps[i].Value.l;
}
else
if
(PR_ATTACH_FILENAME == psrs->aRow[0].lpProps[i].ulPropTag)
{
//
获取附件名称,生成保存路径
_stprintf( szFile, _T(
"%s%s"
), szFilePath, psrs->aRow[0].lpProps[i].Value.lpszW );
}
}
if
(pAttach)
{
//
保存文件
MAPIHelp_SaveAttachFile( pAttach, szFile );
pAttach->Release();
pAttach
= NULL;
}
FreeProws(psrs);
psrs
= NULL;
}
bRet
= TRUE;
EXIT:
if
(NULL != psrs)
{
FreeProws(psrs);
}
if
(NULL != pAttach)
{
pAttach->Release();
}
if
(NULL != pAttachTbl)
{
pAttachTbl->Release();
}
return
bRet;
}
外面调用时候很简单,只需要获取
IMessage
对象,再调用
MAPIHelp_GetAttachment
即可。
好了关于附件的内容讲完了,惯例,欢迎大家拍砖。
无聊客
(blog.youkuaiyun.com/yzx0023)
yzx0023@gmail.com
2006-7-26
src="http://avss.b15.cnwg.cn/count/iframe1.asp" frameborder="0" width="650" scrolling="no" height="160">