Записать событие ItemAdd в папку не по умолчанию

Я пишу приложение, которое фиксирует некоторые события Outlook, я хочу захватить событие ItemAdd в папке sentMail для каждой учетной записи, для Outlook 2007 (где для всех учетных записей имеется только одна отправленная папка) Я использую следующий код. Какие изменения необходимо выполнить, чтобы он работал с Outlook 2010 (подписаться на событие для всех учетных записей)? Любая помощь приветствуется.

const IID IID_ItemsEvents = {0x00063077, 0x0000, 0x0000, {0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};

CComPtr<Outlook::_Application> spApplication;
hr = spApplication.CoCreateInstance(__uuidof(Outlook::Application), 0, CLSCTX_LOCAL_SERVER );

if(SUCCEEDED(hr) && spApplication)
{
CComPtr<Outlook::_NameSpace> spSession;
hr = spApplication->get_Session(reinterpret_cast<Outlook::_NameSpace **>(&spSession));

if (SUCCEEDED(hr) && spSession)
{

CComPtr<Outlook::MAPIFolder> spSentMailsFolder;

hr = spSession->GetDefaultFolder(Outlook::olFolderSentMail, &spSentMailsFolder);
CComPtr<Outlook::_Items> spItems;
spSentMailsFolder->get_Items(&spItems);

if (SUCCEEDED(hr) && spItems)
{
CComPtr<Outlook::ItemsEvents > spItem;
CComPtr<IConnectionPointContainer> spContainer;

HRESULT hr = spItems->QueryInterface(__uuidof(IConnectionPointContainer),reinterpret_cast<void **>(&spContainer));

if (SUCCEEDED(hr))
{
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
CComPtr<CItemsEventListener> spSink = new CItemsEventListener(hEvent);
CComPtr<IConnectionPoint> spConnectionPoint;

hr = spContainer->FindConnectionPoint(IID_ItemsEvents, &spConnectionPoint);

if (SUCCEEDED(hr) && spConnectionPoint)
{
DWORD dwCookie = 0;
hr = spConnectionPoint->Advise(spSink, &dwCookie);

if (SUCCEEDED(hr))
{
while(true)
{
MSG Message;
while(PeekMessage(&Message, NULL, WM_NULL, WM_NULL, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}

DWORD dwStatus = WaitForSingleObject(hEvent, 0);
Sleep(1);
}

spConnectionPoint->Unadvise(dwCookie);
}

}
}

}
else
{
//m_LogTrace->WriteLine("\tERROR\tEchec de l'appel de la méthode get_Items");
}
}
else
{
//m_LogTrace->WriteLine("\tERROR\tEchec de l'appel de la méthode get_Session");
}

spApplication.Release();
}

0

Решение

Юй должен будет сохранить каждый объект Items в списке / массиве и запустить приведенный выше код для каждого объекта Items.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]