注
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、「Windows Automation API: UI オートメーション 」を参照してください。
このトピックでは、MICROSOFT UI オートメーション イベントを UI オートメーション クライアントで使用する方法について説明します。
UI オートメーションを使用すると、クライアントは関心のあるイベントをサブスクライブできます。 この機能により、システム内のすべての UI 要素を継続的にポーリングして、情報、構造、または状態が変更されたかどうかを確認する必要がなくなるので、パフォーマンスが向上します。
また、定義されたスコープ内でのみイベントをリッスンする機能によっても効率が向上します。 たとえば、クライアントは、ツリー内のすべての UI オートメーション要素、または 1 つの要素とその子孫に対してフォーカス変更イベントをリッスンできます。
注
可能性のあるすべてのイベントが Microsoft UI オートメーション プロバイダーによって発生するとは限りません。 たとえば、すべてのプロパティ変更が、WindowsフォームやWin32コントロールの標準プロキシプロバイダーによってイベントを引き起こすわけではありません。
UI オートメーション イベントのより広いビューについては、「 UI オートメーション イベントの概要」を参照してください。
イベントのサブスクライブ
クライアント アプリケーションは、次のいずれかのメソッドを使用して、イベント ハンドラーを登録することで、特定の種類のイベントをサブスクライブします。
メソッドを呼び出す前に、イベントを処理するデリゲート メソッドを作成する必要があります。 必要に応じて、1 つのメソッドでさまざまな種類のイベントを処理し、このメソッドをテーブル内のいずれかのメソッドに対して複数の呼び出しで渡すことができます。 たとえば、1 つの AutomationEventHandler を設定して、 EventIdに応じてさまざまなイベントを異なる方法で処理できます。
注
ウィンドウで閉じたイベントを処理するには、イベント ハンドラーに渡される引数の型を WindowClosedEventArgsとしてキャストします。 ウィンドウの Microsoft UI オートメーション要素は無効になったため、 sender
パラメーターを使用して情報を取得することはできません。代わりに GetRuntimeId を使用してください。
注意事項
アプリケーションが独自の UI からイベントを受信する可能性がある場合は、アプリケーションの UI スレッドを使用してイベントをサブスクライブしたり、サブスクライブを解除したりしないでください。 これを行うと、予期しない動作が発生する可能性があります。 詳細については、「 UI オートメーションスレッドの問題」を参照してください。
シャットダウン時、または UI オートメーション イベントがアプリケーションにとって関心を持たなくなった場合、UI オートメーション クライアントは次のいずれかのメソッドを呼び出す必要があります。
メソッド | 説明 |
---|---|
RemoveAutomationEventHandler | AddAutomationEventHandlerを使用して登録されたイベント ハンドラーの登録を解除します。 |
RemoveAutomationFocusChangedEventHandler | AddAutomationFocusChangedEventHandlerを使用して登録されたイベント ハンドラーの登録を解除します。 |
RemoveAutomationPropertyChangedEventHandler | AddAutomationPropertyChangedEventHandlerを使用して登録されたイベント ハンドラーの登録を解除します。 |
RemoveAllEventHandlers | 登録されているすべてのイベント ハンドラーの登録を解除します。 |
コード例については、「 UI オートメーション イベントのサブスクライブ」を参照してください。