Outlook Events abfangen



  • Hallo!

    Ich habe bereits einen Beitrag (Addons für Outlook entwickeln) geschrieben. Bin auch soweit gekommen, dass ich einen Button in die Outlook-Leiste eingebunden habe.

    Wie kann ich jetzt auf Outlook-Events wie z.B. "Neue Email" reagieren?

    Ich bekomme folgenden Fehler, wenn ich nachfolgenden Code ausführe:

    [C++ Fehler] atlcom.h(4009): E2034 Konvertierung von 'CComPtr<ITypeInfo>' nach 'CComQIPtr<ITypeInfo2,&IID_ITypeInfo2>' nicht möglich
    [C++ Fehler] atlcom.h(4009): E2034 Konvertierung von 'CComPtr<ITypeInfo>' nach 'CComQIPtr<ITypeInfo2,&IID_ITypeInfo2>' nicht möglich
    

    Mein Code sieht wie folgt aus:

    // ADDINIMPL.H : Deklaration von TAddInImpl
    
    #ifndef AddInImplH
    #define AddInImplH
    
    #define ATL_APARTMENT_THREADED
    
    #include "OutlookBouncer_TLB.H"
    #include "AddInDesignerObjects_TLB.h"
    #include "outlook_2k_srvr.h"
    #include "outlook_2k.h"
    #include "office_2k.h"
    #include <Registry.hpp>
    #include "comutil.h"
    
    class TAddInImpl;
    
    #define ID_App						1
    #define ID_Explorer					100
    
    typedef IDispEventImpl<ID_App, TAddInImpl, &DIID_ApplicationEvents, &LIBID_Outlook, 9, 0> AppEvents;
    typedef IDispEventImpl<ID_Explorer, TAddInImpl, &DIID_ExplorerEvents, &LIBID_Outlook, 9, 0> ExpEvents;
    
    /////////////////////////////////////////////////////////////////////////////
    // TAddInImpl     Implementiert IAddIn, die Standard-Schnittstelle von AddIn
    //                  und IAddIn-Ereignisse, die Standard-Quellschnittstelle
    // Threading-Modell : Apartment
    // Duale Schnittstelle: TRUE
    // Ereignisunterstützung  : TRUE
    // Standard-Programm-ID : OutlookBouncer.AddIn
    // Beschreibung    : Bounce Add-In for Outlook
    /////////////////////////////////////////////////////////////////////////////
    class ATL_NO_VTABLE TAddInImpl :
      public CComObjectRootEx<CComSingleThreadModel>,
      public CComCoClass<TAddInImpl, &CLSID_AddIn>,
      public IConnectionPointContainerImpl<TAddInImpl>,
      public TEvents_AddIn<TAddInImpl>,
      public IDispatchImpl<IAddIn, &IID_IAddIn, &LIBID_OutlookBouncer>,
      public IDispatchImpl<_IDTExtensibility2, &IID__IDTExtensibility2, &LIBID_AddInDesignerObjects>,
      public AppEvents,
      public ExpEvents
    {
    public:
      TAddInImpl()
      {
        this->AddInName = "OutlookBouncer";
      }
    
      // Bei der Registrierung des Objekts verwendete Daten
      //
      DECLARE_THREADING_MODEL(otApartment);
      DECLARE_PROGID("OutlookBouncer.AddIn");
      DECLARE_DESCRIPTION("Bounce Add-In for Outlook");
    
      // Funktion wurde zum Aus- und Eintragen des Objekts aufgerufen
      //
      static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
      {
        TRegistry *reg = new TRegistry;
    
        try {
          reg->RootKey = HKEY_CURRENT_USER;
          if (bRegister && reg->OpenKey("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID(), true)) {
            reg->WriteString("FriendlyName", TAddInImpl::GetDescription());
            reg->WriteInteger("LoadBehavior", 3);
            reg->CloseKey();
          } else if (!bRegister && reg->KeyExists("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID())) {
            reg->DeleteKey("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID());
          }
        } __finally {
          delete reg;
        }
    
        TTypedComServerRegistrarT<TAddInImpl>
        regObj(GetObjectCLSID(), GetProgID(), GetDescription());
        return regObj.UpdateRegistry(bRegister);
      }
    
    BEGIN_COM_MAP(TAddInImpl)
      COM_INTERFACE_ENTRY(IAddIn)
      COM_INTERFACE_ENTRY2(IDispatch, IAddIn)
      COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
      COM_INTERFACE_ENTRY(_IDTExtensibility2)
    END_COM_MAP()
    
    BEGIN_CONNECTION_POINT_MAP(TAddInImpl)
      CONNECTION_POINT_ENTRY(DIID_IAddInEvents)
    END_CONNECTION_POINT_MAP()
    
    BEGIN_SINK_MAP(TAddInImpl)
    	SINK_ENTRY_EX(ID_Explorer, DIID_ExplorerEvents, 0x0000f008, OnExplorerClose)
    	SINK_ENTRY_EX(ID_App, DIID_ApplicationEvents, 0x0000f003, OnNewMail)
    END_SINK_MAP()
    
    // IAddIn
    public:
        HRESULT STDMETHODCALLTYPE OnConnection(LPDISPATCH Application, Addindesignerobjects_tlb::ext_ConnectMode ConnectMode, LPDISPATCH AddInInst, LPSAFEARRAY* custom);
        HRESULT STDMETHODCALLTYPE OnDisconnection(Addindesignerobjects_tlb::ext_DisconnectMode RemoveMode, LPSAFEARRAY* custom);
        HRESULT STDMETHODCALLTYPE OnAddInsUpdate(LPSAFEARRAY* custom);
        HRESULT STDMETHODCALLTYPE OnStartupComplete(LPSAFEARRAY* custom);
        HRESULT STDMETHODCALLTYPE OnBeginShutdown(LPSAFEARRAY* custom);
    
        void _stdcall OnNewMail();
        void _stdcall OnExplorerClose();
    
    private:
        CComVariant AddInName;
    
        CComPtr<Outlook_2k::_Application>pOutlookApplication;
        CComPtr<Office_2k::CommandBar>pCommandBar;
        CComPtr<Office_2k::_CommandBarButton>pOutlookBounceButton;
    
        void AddCommandBar();
    };
    
    #endif //AddInImplH
    

Anmelden zum Antworten