未読を開くのは省いて、"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 件のコメント:
コメントを投稿