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 GetApplicationObject
IEnumerable(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.