Dela via


Automatisera Outlook 2010 med C++ i Visual Studio 2010 tillsammans med MFC

Sammanfattning

Den här artikeln innehåller ett steg-för-steg-exempel på hur du skapar ett Microsoft Visual Studio 2010-program som automatiserar Microsoft Outlook 2010 och använder C++ tillsammans med Microsoft Foundation-klasser (MFC).

Mer information

Den här artikeln beskriver hur du skapar ett Visual Studio 2010-projekt som automatiserar Outlook för att göra följande:

  • Skapa och spara en kontakt
  • Skapa och spara en avtalad tid
  • Skapa och skicka ett e-postmeddelande

Även om du kan implementera alla följande avsnitt kan du också utelämna ett eller två av dessa avsnitt så att endast en eller två typer av objekt skapas.

Obs!

Alla följande kodexempel förutsätter filsökvägar som är för ett 32-bitars operativsystem. Se till att du gör nödvändiga ändringar i sökvägen så att de är giltiga för ditt operativsystem och din konfiguration. Dessutom skapar koden Outlook-objekt som har fiktiv information, och detta inkluderar en fiktiv e-postadress. Se till att du ändrar e-postadressen till en av dina giltiga e-postadresser för testning.

Steg 1: Skapa projektet

  1. Starta Visual Studio 2010.
  2. Klicka på Arkiv, klicka på Ny och sedan på Projekt. I listan över installerade mallar expanderar du C++, väljer MFC och sedan MFC-programprojekt . Ge projektet namnet AutomateOutlookWithMFC och klicka sedan på OK.
  3. När MFC-programguiden startar klickar du på Nästa.
  4. Lämna standardvärdena i guiden MFC-program i inställningarna förutom i avsnittet Programtyp . I det här avsnittet väljer du Dialogbaserad.
  5. Klicka på Slutför för att slutföra MFC-programguiden.

Steg 2: Inkludera Microsoft Office 14.0-objektbibliotek

  1. Öppna filen stdafx.h i Solution Explorer-fönstret.

  2. Lägg till följande rad i slutet av filen. Kontrollera att sökvägen är lämplig för ditt operativsystem och din konfiguration:

    #import "C:\\Program Files\\Common Files\\microsoft shared\\OFFICE14\\mso.dll" no_namespace rename("RGB", "MsoRGB") exclude("IAccessible")
    

    Observera Den här raden instruerar MIDL att skapa huvudfilen utan IAccessible-gränssnittet för att undvika potentiella omdefinitionsfel. Alla klassfiler behöver den här referensen. Därför ingår den i huvudfilen stdafx.h.

Steg 3: Skapa Outlook-programobjektet

  1. I fönstret Solution Explorer väljer du filen AutomateOutlookWithMFCDlg.cpp.

  2. Klicka på Projekt-menyn och klicka sedan på Klassguiden.

  3. Klicka på nedåtpilen på knappen Lägg till klass och klicka sedan på MFC-klass från TypeLib.

  4. Under Tillgängliga typbibliotek väljer du Microsoft Outlook 14.0-objektbibliotek.

  5. I listrutan Gränssnitt klickar du på _Application.

  6. Klicka på högerpilen för att lägga till _Application i listan över genererade klasser.

  7. Klicka på Slutför för att generera klassen och klicka sedan på OK för att stänga klassguiden.

  8. Öppna den nyligen skapade rubrikfilen CApplication.h. Leta upp den här raden:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  9. Ersätt raden som du placerade i steg 8 med följande:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  10. Öppna filen AutomateOutlookWithMFCDlg.cpp och lägg sedan till följande i listan över #include-instruktioner:

    #include "CApplication.h"
    

Steg 4: Lägg till en knapp i projektet

  1. Växla till dialogrutan.

  2. Använd verktygslådan Kontroll för att lägga till en knapp i dialogrutan.

  3. Om du vill lägga till en hanterare för knappen dubbelklickar du på knappen och letar upp den här raden:

    // TODO: Add your control notification handler code here
    
  4. Ersätt raden som du placerade i steg 3 med följande kod:

    CApplication olApp;
    COleException e;
    if (!olApp.CreateDispatch(_T("Outlook.Application"), &e))
    {
    CString strErr;
    strErr.Format(_T("CreateDispatch() failed w/error 0x%08lx"), e.m_sc);
    AfxMessageBox(strErr, MB_SETFOREGROUND);
    return;
    }
    

Steg 5: Skapa Outlooks namnområdesobjekt

  1. I Projekt-menyn klickar du på Klassguiden.

  2. Klicka på nedåtpilen på knappen Lägg till klass och klicka sedan på MFC-klass från Typelib.

  3. Under Tillgängliga typbibliotek väljer du Microsoft Outlook 14.0-objektbibliotek.

  4. I listrutan Gränssnitt klickar du på _Namespace.

  5. Klicka på högerpilen för att lägga till _Namespace i listan över genererade klasser.

  6. Klicka på Slutför för att generera klassen och klicka sedan på OK för att stänga klassguiden.

  7. Öppna den nyligen skapade rubrikfilen CNamespace.h. Leta upp den här raden:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersätt raden som du placerade i steg 7 med följande:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Växla till filen AutomateOutlookWithMFCDlg.cpp och lägg till följande i listan över #include-instruktioner:

    #include "CNamespace.h"
    
  10. I funktionen AutomateOutlookWithMFCDlg::OnBnClickedButton1() (knapphanterarkoden) lägger du till den här koden efter den sista raden:

    // Logon. Doesn't hurt if you are already running and logged on... 
    CNameSpace olNs(olApp.GetNamespace(_T("MAPI")));
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    olNs.Logon(covOptional, covOptional, covOptional, covOptional);
    

Steg 6: Skapa och spara en ContactItem

  1. I Projekt-menyn klickar du på Klassguiden.

  2. Klicka på nedåtpilen på knappen Lägg till klass och klicka sedan på MFC-klass från Typelib.

  3. Under Tillgängliga typbibliotek väljer du Microsoft Outlook 14.0-objektbibliotek.

  4. I listrutan Gränssnitt klickar du på _ContactItem.

  5. Klicka på högerpilen för att lägga till _ContactItem i listan över genererade klasser.

  6. Klicka på Slutför för att generera klassen och klicka sedan på OK för att stänga klassguiden.

  7. Öppna den nyligen skapade rubrikfilen CContactItem.h. Leta upp den här raden:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersätt raden som du placerade i steg 7 med följande:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Växla till filen AutomateOutlookWithMFCDlg.cpp och lägg sedan till följande i listan över #include-instruktioner:

    #include "CContactItem.h"
    
  10. I funktionen AutomateOutlookWithMFCDlg::OnBnClickedButton1() (knapphanterarkoden) lägger du till den här koden efter den sista raden:

    // Create and open a new contact
    CContactItem olContactItem(olApp.CreateItem(olContactItem));
    
    olContactItem.put_FullName(_T("John Doe"));
    COleDateTime bdDate;
    bdDate.SetDate(1975, 9, 15);
    olContactItem.put_Birthday(bdDate);
    olContactItem.put_CompanyName(_T("Microsoft"));
    olContactItem.put_HomeTelephoneNumber(_T("KL5-555-1234"));
    olContactItem.put_Email1Address(_T("john.doe@microsoft.com"));
    olContactItem.put_HomeAddress(_T("123 Main Street.\nAnytown, WA 12345"));
    
    // Save the contact
    olContactItem.Save();
    

Steg 7: Skapa och spara en AppointmentItem

  1. I Projekt-menyn klickar du på Klassguiden.

  2. Klicka på nedåtpilen på knappen Lägg till klass och klicka sedan på MFC-klass från Typelib.

  3. Under Tillgängliga typbibliotek väljer du Microsoft Outlook 14.0-objektbibliotek.

  4. I listrutan Gränssnitt klickar du på _AppointmentItem.

  5. Klicka på högerpilen för att lägga till _AppointmentItem i listan över genererade klasser.

  6. Klicka på Slutför för att generera klassen och klicka sedan på OK för att stänga klassguiden.

  7. Öppna den nyligen skapade rubrikfilen CAppointmentItem.h. Leta upp den här raden:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersätt raden som du placerade i steg 7 med följande:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Växla till filen AutomateOutlookWithMFCDlg.cpp och lägg till följande i listan över #include-instruktioner:

    #include "CAppointmentItem.h"
    
  10. I funktionen AutomateOutlookWithMFCDlg::OnBnClickedButton1() (knapphanterarkoden) lägger du till den här koden efter den sista raden:

    // Create a new appointment
    CAppointmentItem olApptItem(olApp.CreateItem(olAppointmentItem));
    
    COleDateTime apptDate = COleDateTime::GetCurrentTime();
    // Set the Start time to occur 2 minutes from now
    apptDate += DATE(2.0/(24.0*60.0));
    
    olApptItem.put_Start(apptDate);
    
    // Set the duration to be 1 hour
    olApptItem.put_Duration(60);
    
    // Set other appointment info
    olApptItem.put_Subject(_T("Meeting discuss plans"));
    olApptItem.put_Body(_T("Meeting with John to discuss plans"));
    olApptItem.put_ReminderMinutesBeforeStart(1);
    olApptItem.put_ReminderSet(TRUE);
    
    // Save Apptointment
    olApptItem.Save();
    
    

Steg 8: Skapa och spara en MailItem

  1. I Projekt-menyn klickar du på Klassguiden.

  2. Klicka på nedåtpilen på knappen Lägg till klass och klicka sedan på MFC-klass från Typelib.

  3. Under Tillgängliga typbibliotek väljer du Microsoft Outlook 14.0-objektbibliotek.

  4. I listrutan Gränssnitt klickar du på _MailItem.

  5. Klicka på högerpilen för att lägga till _MailItem i listan över genererade klasser.

  6. Klicka på Slutför för att generera klassen och klicka sedan på OK för att stänga klassguiden.

  7. Öppna den nyligen skapade rubrikfilen CMailItem.h. Leta upp den här raden:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace
    
  8. Ersätt raden som du placerade i steg 7 med följande:

    #import "C:\\Program Files\\Microsoft Office\\Office14\\msoutl.olb" no_namespace rename("Folder", "OlkFolder") rename("CopyFile", "OlkCopyFile") rename("GetOrganizer", "GetOrganizerAE")
    
  9. Växla till filen AutomateOutlookWithMFCDlg.cpp och lägg till följande i listan över #include-instruktioner:

    #include "CMailItem.h"
    
  10. I funktionen AutomateOutlookWithMFCDlg::OnBnClickedButton1() (knapphanterarkoden) lägger du till den här koden efter den sista raden:

    // Prepare a new mail message
    CMailItem olMailItem(olApp.CreateItem(olMailItem));
    olMailItem.put_To(_T("john.doe@microsoft.com"));
    olMailItem.put_Subject(_T("About our meeting..."));
    olMailItem.put_Body(
    _T("Hi John,\n\n")
    _T("\tI'll see you in two minutes for our meeting!\n\n")
    _T("btw: I've added you to my contact list!"));
    
    // Send the message
    olMailItem.Send();
    
    AfxMessageBox(_T("All done."), MB_SETFOREGROUND);
    
    

Steg 9: Implementera koden för att logga ut

I filen AutomateOutlookWithMFCDlg.cpp lägger du till följande kod i slutet av knapphanterarkoden:

olNs.Logoff();

Steg 10: Kompilera och köra projektet

  1. På menyn Skapa klickar du på Skapa lösning. Kontrollera att det inte finns några byggfel.
  2. Kompilera och kör koden. Den bör skapa och spara en kontakt och en avtalad tid och sedan skapa och skicka ett nytt e-postmeddelande.

Ytterligare anteckningar

Tre metoder byts namn för att undvika potentiella konflikter vid kompilering. Även om metoderna Mapp och CopyFile genererar varningar förhindrar metoden GetOrganizer att projektet kompileras.

Metoden _Appointment::GetOrganizer returnerar ett AddressEntry och har bytt namn till _Appointment::GetOrganizerAE. Vi har bytt namn på den här metoden eftersom _Appointment::Organizer är en egenskap i samma gränssnitt och dupliceringen orsakar en konflikt. I det här fallet skapar MIDL en hjälpfunktion för egenskapen _Appointment::Organizer som heter _Appointment::GetOrganizer. Därför blir hjälpfunktionen en överbelastad metod som returnerar olika typer (till exempel BSTR* jämfört med AddressEntry*). Överlagrade metoder som endast skiljer sig åt med returtypen är inte tillåtna.