次の方法で共有


クライアント側 UI オートメーション プロバイダーの作成

メモメモ

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージ UI Automation クラスを使用する .NET Framework 開発者を対象としています。UI Automationに関する最新情報については、「Windows Automation API: UI Automation (Windows オートメーション API: UI オートメーション)」を参照してください。

このトピックのコード例では、クライアント側の UI オートメーション プロバイダーを実装する方法を示します。

使用例

次のコード例をビルドすると、コンソール ウィンドウで使用する非常に簡単なクライアント側プロバイダーを実装するdynamic-link library (DLL) ができます。 このコードは、有用な機能は備えていませんが、UI オートメーション クライアント アプリケーションによって登録できるプロバイダー アセンブリを設定する場合の基本的な手順を示しています。


Imports System
Imports System.Windows.Automation
Imports System.Windows.Automation.Provider

Namespace ClientSideProviderAssembly
    ' The assembly must implement a UIAutomationClientSideProviders class, 
    ' and the namespace must be the same as the name of the DLL, so that 
    ' UI Automation can find the table of descriptors. In this example, 
    ' the DLL would be "ClientSideProviderAssembly.dll"

    Friend NotInheritable Class UIAutomationClientSideProviders
        ''' <summary>
        ''' Implementation of the static ClientSideProviderDescriptionTable field. 
        ''' In this case, only a single provider is listed in the table.
        ''' </summary>
        Public Shared ClientSideProviderDescriptionTable() As ClientSideProviderDescription = { New ClientSideProviderDescription(New ClientSideProviderFactoryCallback(AddressOf ConsoleProvider.Create), "ConsoleWindowClass") }
                    ' Method that creates the provider object.
                    ' Class of window that will be served by the provider.
    End Class

    Friend Class ConsoleProvider
        Implements IRawElementProviderSimple
        Private providerHwnd As IntPtr

        Public Sub New(ByVal hwnd As IntPtr)
            providerHwnd = hwnd
        End Sub

        Friend Shared Function Create(ByVal hwnd As IntPtr, ByVal idChild As Integer, ByVal idObject As Integer) As IRawElementProviderSimple
            ' This provider doesn't expose children, so never expects 
            ' nonzero values for idChild.
            If idChild <> 0 Then
                Return Nothing
            Else
                Return New ConsoleProvider(hwnd)
            End If

        End Function

        Private Shared Function Create(ByVal hwnd As IntPtr, ByVal idChild As Integer) As IRawElementProviderSimple
            ' Something is wrong if idChild is not 0.
            If idChild <> 0 Then
                Return Nothing
            Else
                Return New ConsoleProvider(hwnd)
            End If
        End Function

        #Region "IRawElementProviderSimple"

        ' This is a skeleton implementation. The only real functionality 
        ' at this stage is to return the name of the element and the host 
        ' window provider, which can supply other properties.

        Private ReadOnly Property IRawElementProviderSimple_ProviderOptions() As ProviderOptions Implements IRawElementProviderSimple.ProviderOptions
            Get
                Return ProviderOptions.ClientSideProvider
            End Get
        End Property

        Private ReadOnly Property HostRawElementProvider() As IRawElementProviderSimple Implements IRawElementProviderSimple.HostRawElementProvider
            Get
                Return AutomationInteropProvider.HostProviderFromHandle(providerHwnd)
            End Get
        End Property

        Private Function GetPropertyValue(ByVal propertyId As Integer) As Object Implements IRawElementProviderSimple.GetPropertyValue
            If propertyId = AutomationElementIdentifiers.NameProperty.Id Then
                Return "Custom Console Window"
            Else
                Return Nothing
            End If

        End Function

        Private Function GetPatternProvider(ByVal iid As Integer) As Object Implements IRawElementProviderSimple.GetPatternProvider
            Return Nothing
        End Function
        #End Region ' IRawElementProviderSimple
    End Class
End Namespace
using System;
using System.Windows.Automation;
using System.Windows.Automation.Provider;

namespace ClientSideProviderAssembly
{
    // The assembly must implement a UIAutomationClientSideProviders class, 
    // and the namespace must be the same as the name of the DLL, so that 
    // UI Automation can find the table of descriptors. In this example, 
    // the DLL would be "ClientSideProviderAssembly.dll"

    static class UIAutomationClientSideProviders
    {
        /// <summary>
        /// Implementation of the static ClientSideProviderDescriptionTable field. 
        /// In this case, only a single provider is listed in the table.
        /// </summary>
        public static ClientSideProviderDescription[] ClientSideProviderDescriptionTable = 
            { 
                new ClientSideProviderDescription(
                    // Method that creates the provider object.
                    new ClientSideProviderFactoryCallback(ConsoleProvider.Create),   
                    // Class of window that will be served by the provider.
                    "ConsoleWindowClass")                                                
            };
    }

    class ConsoleProvider : IRawElementProviderSimple
    {
        IntPtr providerHwnd;

        public ConsoleProvider(IntPtr hwnd)
        {
            providerHwnd = hwnd;
        }

        internal static IRawElementProviderSimple Create(
            IntPtr hwnd, int idChild, int idObject)
        {
            // This provider doesn't expose children, so never expects 
            // nonzero values for idChild.
            if (idChild != 0)
                return null;
            else
                return new ConsoleProvider(hwnd);

        }

        private static IRawElementProviderSimple Create(
            IntPtr hwnd, int idChild)
        {
            // Something is wrong if idChild is not 0.
            if (idChild != 0) return null;
            else return new ConsoleProvider(hwnd);
        }

        #region IRawElementProviderSimple

        // This is a skeleton implementation. The only real functionality 
        // at this stage is to return the name of the element and the host 
        // window provider, which can supply other properties.

        ProviderOptions IRawElementProviderSimple.ProviderOptions
        {
            get
            {
                return ProviderOptions.ClientSideProvider;
            }
        }

        IRawElementProviderSimple IRawElementProviderSimple.HostRawElementProvider
        {
            get
            {
                return AutomationInteropProvider.HostProviderFromHandle(providerHwnd);
            }
        }

        object IRawElementProviderSimple.GetPropertyValue(int propertyId)
        {
            if (propertyId == AutomationElementIdentifiers.NameProperty.Id)
                return "Custom Console Window";
            else
                return null;

        }

        object IRawElementProviderSimple.GetPatternProvider(int iid)
        {
            return null;
        }
        #endregion IRawElementProviderSimple
    }
}

参照

処理手順

クライアント側プロバイダー アセンブリの登録

概念

UI オートメーション プロバイダーの概要