Поделиться через


Получение экземпляра Outlook и вход в него

В этом разделе показано, как получить объект Application , представляющий активный экземпляр Outlook, если он запущен на локальном компьютере, или как создать новый экземпляр Outlook, войти в профиль по умолчанию и вернуть этот экземпляр Outlook.

Хельмут Обертаннер предоставил следующие примеры кода. Helmut является самым ценным специалистом Майкрософт с опытом работы с инструментами разработки Microsoft Office в Microsoft Visual Studio и Microsoft Office Outlook.

Следующие примеры управляемого кода написаны на C# и Visual Basic. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели.

Для Outlook можно использовать Visual Studio и первичную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили Outlook 2013 PIA и добавили ссылку на компонент Microsoft Outlook 15.0 Object Library в Visual Studio.

В классе надстройки Outlook следует использовать следующие примеры ThisAddIn кода (с помощью средств разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals. Дополнительные сведения об использовании Outlook PIA для разработки управляемых решений Outlook см. в статье Справочник по основной сборке взаимодействия Outlook на веб-сайте MSDN.

В следующих примерах Sample кода содержится GetApplicationObject метод класса , реализованный как часть проекта надстройки Outlook. Каждый проект добавляет ссылку на Outlook PIA на основе пространства имен Microsoft.Office.Interop.Outlook.

Метод GetApplicationObject использует классы в библиотеке классов платформа .NET Framework для проверки и получения любого процесса Outlook, запущенного на локальном компьютере. Сначала используется метод GetProcessesByName класса Process в пространстве имен System.Diagnostics для получения массива компонентов процесса на локальном компьютере с общим именем процесса "OUTLOOK".

Чтобы проверить, содержит ли массив хотя бы один процесс Outlook, GetApplicationObject используется интегрированный запрос (LINQ) (Майкрософт). Класс Enumerable в пространстве имен System.Linq предоставляет набор методов, включая метод Count, которые реализуют универсальный интерфейс IEnumerable(T).

Так как класс Array реализует интерфейс IEnumerable(T), можно применить метод Count к массиву, GetApplicationObject возвращаемому методом GetProcessesByName, чтобы узнать, выполняется ли процесс Outlook. В этом случае GetApplicationObject использует метод GetActiveObject класса Marshal в пространстве имен System.Runtime.InteropServices для получения этого экземпляра Outlook и приводит этот объект к объекту Приложения Outlook.

Если Outlook не запущен на локальном компьютере, GetApplicationObject создает новый экземпляр Outlook, использует метод Logon объекта NameSpace для входа в профиль по умолчанию и возвращает новый экземпляр Outlook.

Ниже приведен пример кода на языке 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; 
        } 
 
    } 
}

Ниже приведен пример кода на языке 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

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.