Outlook のインスタンスを取得し、サインインするGet and sign in to an instance of Outlook

このトピックでは、ローカル コンピューターで Microsoft Outlook が実行されている場合には Outlook のアクティブ インスタンスを表す Application オブジェクトを取得し、そうでない場合には Outlook の新しいインスタンスを作成し、既定のプロファイルにサインインし、Outlook のそのインスタンスを返す方法を示します。This topic shows how to obtain an Application object that represents an active instance of Microsoft Outlook, if there is one running on the local computer, or to create a new instance of Outlook, sign in to the default profile, and return that instance of Outlook.

Example

注意

次のコード例は、Helmut Obertanner 氏が提供したものです。Helmut Obertanner provided the following code examples. Helmut 氏の得意分野は、Office Developer Tools for Visual Studio と Outlook です。Helmut's expertise is in Office Developer Tools for Visual Studio and Outlook.

次のコード例には、Sample クラスの GetApplicationObject メソッドが含まれています。このメソッドは、Outlook アドイン プロジェクトの一部として実装されています。The following code examples contain the GetApplicationObject method of the Sample class, implemented as part of an Outlook add-in project. それぞれのプロジェクトでは、Microsoft.Office.Interop.Outlook 名前空間に基づいた、Outlook プライマリ互換運用機能アセンブリへの参照を追加しています。Each project adds a reference to the Outlook Primary Interop Assembly, which is based on the Microsoft.Office.Interop.Outlook namespace.

GetApplicationObject メソッドは、.NET Framework クラス ライブラリのクラスを使用して、ローカル コンピューターで実行中の Outlook プロセスを確認および取得します。The GetApplicationObject method uses classes in the .NET Framework class library to check and obtain any Outlook process running on the local computer. まず、 System.Diagnostics 名前空間内の Process クラスの GetProcessesByName メソッドを使用して、ローカル コンピューター上のプロセス名 "OUTLOOK" のプロセス コンポーネントの配列を取得します。It first uses the GetProcessesByName method of the Process class in the System.Diagnostics namespace to obtain an array of process components on the local computer that share the process name "OUTLOOK". 配列に少なくとも 1 つの Outlook プロセスが含まれているかどうかを確認するために、GetApplicationObject では Microsoft 統合言語クエリ (LINQ) を使用しています。To check whether the array does contain at least one Outlook process, GetApplicationObject uses Microsoft Language Integrated Query (LINQ). System.Linq 名前空間内の Enumerable クラスには、 > ジェネリック インターフェイスを実装している各種メソッドがあり、 Count メソッドもその 1 つです。The Enumerable class in the System.Linq namespace provides a set of methods, including the Count method, that implement the IEnumerable<T> generic interface. Array クラスは IEnumerable(T) インターフェイスを実装しているため、GetProcessesByName から返された配列に Count メソッドを利用することで、実行中の Outlook プロセスが存在するかどうかを確認できます。Because the Array class implements the IEnumerable(T) interface, GetApplicationObject can apply the Count method to the array returned by GetProcessesByName to see whether there is an Outlook process running. 存在している場合、GetApplicationObject は System.Runtime.InteropServices 名前空間の Marshal クラスに含まれる GetActiveObject メソッドを使用して、その Outlook のインスタンスを取得し、そのオブジェクトを Outlook Application オブジェクトにキャストします。If there is, GetApplicationObject uses the GetActiveObject method of the Marshal class in the System.Runtime.InteropServices namespace to obtain that instance of Outlook, and casts that object to an Outlook Application object.

Outlook がローカル コンピューターで実行中ではない場合、GetApplicationObject では、Outlook の新しいインスタンスを作成し、NameSpace オブジェクトの Logon(Object, Object, Object, Object) メソッドを使用して既定のプロファイルにサインインし、Outlook のその新しいインスタンスを返します。If Outlook is not running on the local computer, GetApplicationObject creates a new instance of Outlook, uses the Logon(Object, Object, Object, Object) method of the NameSpace object to sign in to the default profile, and returns that new instance of Outlook.

次に、Visual Basic のコード例を示します。その後に、C# のコード例を示します。The following is the Visual Basic code example, followed by the C# code example.

Visual Studio を使用してこのコード例をテストする場合、Microsoft.Office.Interop.Outlook 名前空間をインポートするときに、まず Microsoft Outlook 15.0 オブジェクト ライブラリ コンポーネントへの参照を追加し、Outlook 変数を指定します。If you use Visual Studio to test this code example, you must first add a reference to the Microsoft Outlook 15.0 Object Library component and specify the Outlook variable when you import the Microsoft.Office.Interop.Outlook namespace. Imports または using ステートメントは、コード例の関数の前に直接置くことはできません。パブリック Class 宣言の前に追加する必要があります。The Imports or using statement must not occur directly before the functions in the code example but must be added before the public Class declaration. 次のコード行は、Visual Basic および C# でインポートおよび割り当てを行う方法を示しています。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;
        }

    }
}

関連項目See also