Outlook のインスタンスを取得してログインする

このトピックでは、ローカル コンピューターで実行されている Outlook のアクティブなインスタンスを表す Application オブジェクトを取得する方法、または Outlook の新しいインスタンスを作成する方法、既定のプロファイルにログオンして Outlook のそのインスタンスを返す方法について説明します。

以下のコード例は、Helmut Obertanner が用意したものです。 Helmut は、Microsoft Visual Studio と Microsoft Office Outlook の Microsoft Office 開発ツールに関する専門知識を持つ Microsoft Most Valuable Professional です。

The following managed code samples are written in C# and Visual Basic. コンポーネント オブジェクト モデル (COM) に呼び出す必要がある .NET Framework マネージ コード サンプルを実行するには、マネージ インターフェイスを定義し、オブジェクト モデル タイプ ライブラリの COM オブジェクトにマップする相互運用機能アセンブリを使用する必要があります。

Outlook の場合、Visual Studio および Outlook プライマリ相互運用機能アセンブリ (PIA) を使用できます。 Outlook 2013 用のマネージ コード サンプルを実行する前に、Outlook 2013 PIA をインストールしており、Visual Studio で Microsoft Outlook 15.0 オブジェクト ライブラリ コンポーネントへの参照を追加していることを確認してください。

Outlook アドインのクラスでは ThisAddIn 、次のコード サンプルを使用する必要があります (Office Developer Tools for Visual Studio を使用)。 コードの Application オブジェクトは で提供された、信頼済み Outlook ThisAddIn.Globals オブジェクトである必要があります。 Outlook PIA を使用してマネージド Outlook ソリューションを開発する方法の詳細については、MSDN の 「Outlook プライマリ相互運用機能アセンブリ リファレンスへようこそ」を参照 してください。

次のコード サンプルには、Outlook アドイン プロジェクトのSample一部として実装された クラスのメソッドが含まれていますGetApplicationObject。 各プロジェクトは、 Microsoft.Office.Interop.Outlook 名前空間に基づく Outlook PIA への参照を追加します。

メソッドはGetApplicationObject、.NET Framework クラス ライブラリのクラスを使用して、ローカル コンピューターで実行されている Outlook プロセスを確認して取得します。 最初に、System.Diagnostics 名前空間の Process クラスの GetProcessesByName メソッドを使用して、プロセス名 "OUTLOOK" を共有するローカル コンピューター上のプロセス コンポーネントの配列を取得します。

配列に少なくとも 1 つの Outlook プロセスが含まれているかどうかを確認するには、 GetApplicationObject Microsoft 言語統合クエリ (LINQ) を使用します。 System.Linq 名前空間の Enumerable クラスは、IEnumerable(T) ジェネリック インターフェイスを実装する Count メソッドを含む一連のメソッドを提供します。

Array クラスは IEnumerable(T) インターフェイスを実装するため、 GetApplicationObjectGetProcessesByName によって返される配列に Count メソッドを適用して、Outlook プロセスが実行されているかどうかを確認できます。 がある場合は、 GetApplicationObjectSystem.Runtime.InteropServices 名前空間の Marshal クラスの GetActiveObject メソッドを使用して Outlook のインスタンスを取得し、そのオブジェクトを Outlook Application オブジェクトにキャストします。

Outlook がローカル コンピューターで実行されていない場合は、 GetApplicationObject Outlook の新しいインスタンスを作成し、NameSpace オブジェクトの Logon メソッドを使用して既定のプロファイルにログオンし、その新しい 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 のサポートおよびフィードバックを参照してください。