Abrufen von und Anmelden bei einer Instanz von Outlook
In diesem Thema wird gezeigt, wie Sie ein Application-Objekt abrufen, das eine aktive Instanz von Outlook darstellt, wenn eine auf dem lokalen Computer ausgeführt wird, oder wie Sie eine neue Instanz von Outlook erstellen, sich beim Standardprofil anmelden und diese Instanz von Outlook zurückgeben.
Helmut Obertanner hat die folgenden Codebeispiele zur Verfügung gestellt. Helmut ist ein Microsoft Most Valuable Professional mit Erfahrung in Microsoft Office-Entwicklungstools in Microsoft Visual Studio und Microsoft Office Outlook.
Die folgenden Beispiele für verwalteten Code sind in C# und Visual Basic geschrieben. Um ein verwaltetes Codebeispiel von .NET Framework auszuführen, das ein Component Object Model (COM) aufrufen muss, müssen Sie eine Interopassembly verwenden, die verwaltete Schnittstellen definiert und den COM-Objekten in der Object Model-Typbibliothek zuordnet.
Für Outlook können Sie Visual Studio und die Outlook Primary Interop Assembly (PIA) verwenden. Stellen Sie sicher, dass Sie die Outlook 2013 PIA installiert und eine Referenz zur Microsoft Outlook 15.0-Objektbibliothekkomponente in Visual Studio hinzugefügt haben, bevor Sie verwaltete Codebeispiele für Outlook 2013 ausführen.
Sie sollten die folgenden Codebeispiele in der ThisAddIn
Klasse eines Outlook-Add-Ins (mit Office Developer Tools für Visual Studio) verwenden. Das Objekt der Anwendung im Code muss ein vertrauenswürdiges Outlook- Anwendungsobjekt sein, das von ThisAddIn.Globals
bereitgestellt wird. Weitere Informationen zur Verwendung der Outlook-PIA zur Entwicklung verwalteter Outlook-Lösungen finden Sie auf MSDN unter Willkommen bei der Referenz zur primären Interopassembly von Outlook (PIA).
Die folgenden Codebeispiele enthalten die GetApplicationObject
-Methode der -Klasse, die Sample
als Teil eines Outlook-Add-In-Projekts implementiert wird. Jedes Projekt fügt einen Verweis auf die Outlook-PIA hinzu, die auf dem Microsoft.Office.Interop.Outlook-Namespace basiert.
Die GetApplicationObject
-Methode verwendet Klassen in der .NET Framework Klassenbibliothek, um outlook-Prozesse zu überprüfen und abzurufen, die auf dem lokalen Computer ausgeführt werden. Zunächst wird die GetProcessesByName-Methode der Process-Klasse im System.Diagnostics-Namespace verwendet, um ein Array von Prozesskomponenten auf dem lokalen Computer abzurufen, die den Prozessnamen "OUTLOOK" gemeinsam nutzen.
Um zu prüfen, ob das Array nicht mindestens einen Outlook-Prozess enthält, verwendet GetApplicationObject
die Microsoft Language Integrated Query (LINQ). Die Enumerable-Klasse im System.Linq-Namespace stellt einen Satz von Methoden bereit, einschließlich der Count-Methode , die die generische IEnumerable(T) -Schnittstelle implementieren.
Da die Array-Klasse die IEnumerable(T) -Schnittstelle implementiert, GetApplicationObject
kann die Count-Methode auf das von GetProcessesByName zurückgegebene Array angewendet werden, um zu sehen, ob ein Outlook-Prozess ausgeführt wird. Wenn dies der Fall ist, GetApplicationObject
verwendet die GetActiveObject-Methode der Marshal-Klasse im System.Runtime.InteropServices-Namespace , um diese Instanz von Outlook abzurufen, und wandelt dieses Objekt in ein Outlook Application-Objekt um.
Wenn Outlook nicht auf dem lokalen Computer ausgeführt wird, erstellt GetApplicationObject
eine neue Instanz von Outlook, verwendet die Methode Logon des NameSpace -Objekts, um sich am Standardprofil anzumelden, und gibt dann die neue Instanz von Outlook zurück.
Das folgende Codebeispiel verwendet C#.
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 if 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 log on 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;
}
}
}
Das folgende Codebeispiel verwendet Visual Basic.
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 if 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 log on 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
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.