2008年11月29日土曜日

受信トレイを開く〜

ももたろさんのkickmailソースを取り込んで自作todaycompa...もどきで受信トレイを直接開けるように出来ました。ももたろさんありがとうございます

未読を開くのは省いて、"ActiveSync"じゃない最初に見つけたアカウントのフォルダを開くように必要そうなところだけコードを抜き出した。けど、実はあんまり理解できてない(QueryRowsとか何?)ので後処理とかちょっと不安

ソースはこんな感じになった

void ShowInFolder(void)
{
LPMAPISESSION pSession = NULL;
HRESULT hRes = S_OK;

if(FAILED(MAPIInitialize(NULL)))
return;

if(FAILED(MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI, &pSession)))
return;


LPMAPITABLE pStoresTbl = NULL;

if(SUCCEEDED(pSession->GetMsgStoresTable(0, &pStoresTbl)))
{

SizedSPropTagArray(2, Columns) = {2, {PR_DISPLAY_NAME, PR_ENTRYID}};
bool flag = SUCCEEDED(pStoresTbl->SetColumns((LPSPropTagArray)&Columns, 0));

LPSRowSet pRows = NULL;
while (flag)
{
if (!QueryRows(pStoresTbl, &pRows))
break;

IMsgStore *pMsgStore;
SBinary entry = pRows->aRow[0].lpProps[1].Value.bin;
hRes = pSession->OpenMsgStore(NULL,
entry.cb,
(LPENTRYID)entry.lpb,
NULL,
MAPI_BEST_ACCESS,
&pMsgStore);
LPSPropValue lpProp;
if(SUCCEEDED(HrGetOneProp(pMsgStore, PR_DISPLAY_NAME, &lpProp)))
{
if(wcscmp(lpProp->Value.lpszW,_T("ActiveSync"))==0)
{
}
else
{
ULONG cbEntryID;
LPENTRYID lppEntryID;
if(SUCCEEDED(pMsgStore->GetReceiveFolder(NULL,
NULL,
&cbEntryID,
&lppEntryID,
NULL)))
{
hRes = MailSwitchToFolder(lppEntryID, cbEntryID);
flag=false;
}
}
MAPIFreeBuffer(lpProp);
}

RELEASE_OBJ(pMsgStore);
FreeProws(pRows);
}

}
pSession->Logoff(NULL, 0L, 0);

RELEASE_OBJ(pSession);

}


0 件のコメント: