Abrufen einer Instanz von Outlook und Anmelden bei dieser

In diesem Thema wird gezeigt, wie ein Application-Objekt abgerufen wird, das eine aktive Instanz von Microsoft Outlook darstellt, falls eine Instanz auf dem lokalen Computer ausgeführt wird, oder wie eine neue Instanz von Outlook erstellt, die Anmeldung am Standardprofil durchgeführt und diese Instanz von Outlook zurückgegeben wird.

Beispiel

Hinweis

Helmut Obertanner hat das folgende Codebeispiel bereitgestellt. Helmut verfügt über Fachwissen zu Office Developer Tools für Visual Studio und Outlook.

Die folgenden Codebeispiele enthalten die GetApplicationObject-Methode der Sample-Klasse, die als Teil eines Outlook-Add-In-Projekts implementiert wird. Jedes Projekt fügt einen Verweis auf die primäre Interopassembly für Outlook hinzu, der auf dem Microsoft.Office.Interop.Outlook-Namespace basiert.

Die GetApplicationObject-Methode verwendet Klassen in der .NET Framework-Klassenbibliothek, um alle Outlook-Prozesse zu prüfen und abzurufen, die auf dem lokalen Computer ausgeführt werden. Sie verwendet zunächst die GetProcessesByName-Methode der Process-Klasse im System.Diagnostics-Namespace, um ein Array von Prozesskomponenten auf dem lokalen abzurufen, die den Prozessnamen „OUTLOOK“ aufweisen. Um zu überprüfen, ob das Array mindestens einen Outlook-Prozess enthält, verwendet GetApplicationObject Microsoft Language Integrated Query (LINQ). Die Enumerable-Klasse im System.Linq-Namespace bietet eine Reihe von Methoden, einschließlich der Count-Methode, die die generische IEnumerable<T>-Schnittstelle implementieren. Da die Array-Klasse die IEnumerable(T)-Schnittstelle implementiert, kann GetApplicationObject die Count-Methode auf das von GetProcessesByName zurückgegebene Array anwenden, um festzustellen, ob ein Outlook-Prozess ausgeführt wird. Ist dies der Fall verwendet GetApplicationObject die GetActiveObject-Methode der Marshal-Klasse im System.Runtime.InteropServices-Namespace, um diese Instanz von Outlook abzurufen, und wandelt das Objekt in ein Application-Objekt für Outlook.

Wird Outlook auf dem lokalen Computer nicht ausgeführt, erstellt GetApplicationObject eine neue Instanz von Outlook, führt mithilfe der Logon(Object, Object, Object, Object)-Methode des NameSpace-Objekts die Anmeldung am Standardprofil durch und gibt diese neue Instanz von Outlook zurück.

Es folgen das Visual Basic-Codebeispiel und anschließend das C#-Codebeispiel.

Wenn Sie Visual Studio verwenden, um dieses Codebeispiel zu testen, müssen Sie der Microsoft Outlook 15.0-Objektbibliothekkomponente zuerst einen Verweis hinzufügen und die Outlook-Variable angeben, wenn Sie den Microsoft.Office.Interop.Outlook-Namespace importieren. Die Anweisung Imports oder using darf im Codebeispiel nicht direkt vor den Funktionen stehen, sondern muss vor der öffentlichen Class-Deklaration hinzugefügt werden. Die folgenden Codezeilen zeigen, wie Sie den Import und die Zuweisung in Visual Basic und C# vornehmen.

Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Imports System.Diagnostics
Imports System.Linq
Imports System.Reflection
Imports System.Runtime.InteropServices
Imports Outlook = Microsoft.Office.Interop.Outlook

Namespace OutlookAddIn2
    Class Sample

        Function GetApplicationObject() As Outlook.Application

            Dim application As Outlook.Application

            ' Check whether there is an Outlook process running.
            If Process.GetProcessesByName("OUTLOOK").Count() > 0 Then

                ' If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                application = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
            Else

                ' If not, create a new instance of Outlook and sign in to the default profile.
                application = New Outlook.Application()
                Dim ns As Outlook.NameSpace = application.GetNamespace("MAPI")
                ns.Logon("", "", Missing.Value, Missing.Value)
                ns = Nothing
            End If

            ' Return the Outlook Application object.
            Return application
        End Function

    End Class
End Namespace
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookAddIn1
{
    class Sample
    {
        Outlook.Application GetApplicationObject()
        {

            Outlook.Application application = null;

            // Check whether there is an Outlook process running.
            if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
            {

                // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
            }
            else
            {

                // If not, create a new instance of Outlook and sign in to the default profile.
                application = new Outlook.Application();
                Outlook.NameSpace nameSpace = application.GetNamespace("MAPI");
                nameSpace.Logon("", "", Missing.Value, Missing.Value);
                nameSpace = null;
            }

            // Return the Outlook Application object.
            return application;
        }

    }
}

Siehe auch