Получение экземпляра 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 и обратная связь.