Share via


Acessar e entrar em uma instância do Outlook

Este tópico mostra como obter um objeto Application que representa uma instância ativa do Microsoft Outlook, se houver uma em execução no computador local, ou para criar uma nova instância do Outlook, entre no perfil padrão e retorne essa instância do Outlook.

Exemplo

Observação

Helmut Obertanner forneceu os exemplos de código a seguir. A experiência de Helmut é em Ferramentas de Desenvolvedor do Office para Visual Studio e Outlook.

Os exemplos de código a seguir contêm o método GetApplicationObject da classe Sample, implementados como parte de um projeto de suplemento do Outlook. Cada projeto adiciona uma referência para o Outlook PIA, que se baseia no namespace Microsoft.Office.Interop.Outlook.

O método GetApplicationObject usa classes na biblioteca de classes .NET Framework para verificar e obter qualquer processo do Outlook em execução no computador local. Ele primeiro usa o método GetProcessesByName da classe Process no namespace System.Diagnostics para obter uma matriz de componentes de processo no computador local que compartilham o nome do processo "OUTLOOK". Para verificar se a matriz contém pelo menos um processo do Outlook, GetApplicationObject usa o Microsoft Language Integrated Query (LINQ). A classe Enumerable no namespace System.Linq fornece um conjunto de métodos, incluindo o método Count que implementa a interface genérica IEnumerable<T>. Como a classe Array implementa a interface IEnumerable(T), GetApplicationObject pode aplicar o método Count para a matriz retornada por GetProcessesByName para ver se há um processo do Outlook em execução. Se houver, o GetApplicationObject usa o método GetActiveObject da classe Marshal no namespace System.Runtime.InteropServices para obter essa instância do Outlook, e projeta esse objeto para um objeto Application do Outlook.

Se o Outlook não estiver sendo executado no computador local, o GetApplicationObject criará uma nova instância do Outlook, usará o método Logon(Object, Object, Object, Object) do objeto NameSpace para entrar no perfil padrão e retornará a nova instância do Outlook.

A seguir está o exemplo de código do Visual Basic, seguido pelo exemplo de código C#.

Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instrução Imports ou using não deve vir diretamente antes de funções no exemplo de código, mas deve ser adicionada antes da declaração Class pública. The following lines of code show how to do the import and assignment in Visual Basic and C#.

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;
        }

    }
}

Confira também