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:
isplayInfo(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
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:
![Big grin :D :D](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f600.png)
{
// 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