Das ausgewählte Element in Outlook ermitteln COM Addin

ThAigner

Grünschnabel
Hallo Experten,


Ich bin gerade dabei ein COM Addin für Outlook zu programmieren, in diesem Addin will ich herausbekommen was für eine Element gerade ausgewählt ist (E-Mail, Kalendereintrag, Kontakt,…).
Ich hab zwar ein Beispiel in der MSDN gefunden das sich damit beschäftigt aber es ist leider nicht für ein COM Addin und ich kann es nicht auf mein Problem übertragen.

http://support.microsoft.com/default.aspx?scid=kb;en-us;241287

Mein Versuch:

CComPtr<Outlook::Selection> spSelection;
m_spExplorer->get_Selection(&spSelection);
long itemsSelected;
spSelection->get_Count(&itemsSelected);
if(itemsSelected != 1) <-- Will nur ein Element andernfalls exit
return;
IDispatch* olSelectedItem;
CComVariant index;
index.vt = VT_I4;
index.lVal = 1;
spSelection->Item(index,&olSelectedItem);
DisplayInfo(olSelectedItem);

void COAddin::DisplayInfo(IDispatch* olItem)
{
// You need to determine the message class
WCHAR *rgszNames = L"MessageClass\0";
int cNames = 1;
DISPID dispID;
DISPPARAMS dispParams;
CString strMessageClass;
CComVariant covResult;
HRESULT hr;

dispParams.cArgs = 0;
dispParams.cNamedArgs = 0;
dispParams.rgvarg = NULL;
dispParams.rgdispidNamedArgs = NULL;
hr = olItem->GetIDsOfNames(IID_NULL, &rgszNames, cNames, GetThreadLocale(), &dispID);

if (FAILED(hr))
return; // if you failed, exit

// Request the MessageClass from the LPDISPATCH the you have.
hr = olItem->Invoke(dispID, IID_NULL, GetThreadLocale(), DISPATCH_PROPERTYGET, &dispParams, &covResult, NULL, NULL);

if (FAILED(hr))
return; // if you failed, exit

strMessageClass = covResult.bstrVal;

if (strMessageClass == "IPM.Appointment") // A calendar entry was selected
{
CComPtr<Outlook::_AppointmentItem> olAppointmentItem; ?
olAppointmentItem = (_AppointmentItem) olItem;
AfxMessageBox(olAppointmentItem.GetSubject());
AfxMessageBox(olAppointmentItem.GetBody());
}
else if (strMessageClass == "IPM.Contact") // A contact was selected

Bin für jede Hilfe Dankbar,


Thomas
 
Zurück