Obtener e iniciar sesión en una instancia de Outlook

En este tema se muestra cómo obtener un objeto Application, que representa una sesión activa de Outlook en caso de que exista en el equipo local, o cómo crear una nueva sesión de Outlook, iniciar sesión con el perfil predeterminado y devolver la sesión de Outlook.

Helmut Obertanner proporciona los siguientes ejemplos de código. Helmut es un MVP de Microsoft, con experiencia en las herramientas de desarrollo de Microsoft Office en Microsoft Visual Studio y Microsoft Office Outlook.

Los siguientes ejemplos de código administrado están escritos en C# y Visual Basic. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos.

Para Outlook, puede utilizar Visual Studio y el ensamblado de interoperabilidad primario (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, compruebe que tiene el PIA de Outlook 2013 instalado y que ha añadido una referencia al componente biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio.

Debe usar los siguientes ejemplos de código en la ThisAddIn clase de un complemento de Outlook (con Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals. Si desea más información sobre el uso del PIA de Outlook para desarrollar soluciones de Outlook administradas, consulte Outlook 2013 Primary Interop Assembly Reference en MSDN.

Los ejemplos de código siguientes contienen el GetApplicationObject método de la Sample clase , implementado como parte de un proyecto de complemento de Outlook. Cada proyecto agrega una referencia al PIA de Outlook, que se basa en el espacio de nombres Microsoft.Office.Interop.Outlook.

El GetApplicationObject método usa clases de la biblioteca de clases de .NET Framework para comprobar y obtener cualquier proceso de Outlook que se ejecute en el equipo local. En primer lugar, usa el método GetProcessesByName de la clase Process en el espacio de nombres System.Diagnostics para obtener una matriz de componentes de proceso en el equipo local que comparten el nombre de proceso "OUTLOOK".

Para comprobar si la matriz contiene al menos un proceso de Outlook, GetApplicationObject usa Microsoft Language Integrated Query (LINQ). La clase Enumerable del espacio de nombres System.Linq proporciona un conjunto de métodos, incluido el método Count, que implementan la interfaz genérica IEnumerable(T).

Dado que la clase Array implementa la interfaz GetApplicationObjectIEnumerable(T), puede aplicar el método Count a la matriz devuelta por GetProcessesByName para ver si hay un proceso de Outlook en ejecución. Si lo hay, GetApplicationObject usa el método GetActiveObject de la clase Marshal en el espacio de nombres System.Runtime.InteropServices para obtener esa instancia de Outlook y convierte ese objeto en un objeto Application de Outlook.

Si Outlook no se ejecuta en el equipo local, GetApplicationObject crea una nueva instancia de Outlook, usa el método Logon del objeto NameSpace para iniciar sesión en el perfil predeterminado y devuelve esa nueva instancia de Outlook.

El siguiente es el ejemplo de código en 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; 
        } 
 
    } 
}

El siguiente es el ejemplo de código en 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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.