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