IUIAutomation6
COM公式ドキュメント
IUIAutomation5 インターフェースを拡張し、Microsoft UI Automation の機能を制御するための追加メソッドを公開します。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
1 回のメソッド呼び出しで 1 つ以上のイベントリスナーを登録します。
| handlerGroup | IUIAutomationEventHandlerGroup** | out | UI Automation イベントリスナーのコレクション。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
CreateEventHandlerGroup で指定されたイベントハンドラーメソッドのコレクションを登録します。
| element | IUIAutomationElement* | in | イベントハンドラーグループに関連付けられた UI Automation 要素へのポインター。 |
| handlerGroup | IUIAutomationEventHandlerGroup* | in | UI Automation イベントリスナーのコレクション。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
イベントの登録解除要求とイベントの受信が同時に発生した場合、ハンドラーの登録解除後にイベントがイベントハンドラーへ配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、参照カウントが 0 に達するまでイベントハンドラーオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、イベントが遅れて配信された場合にアクセス違反が発生する可能性があります。
指定された UI Automation イベントハンドラーグループを非同期で削除します。
| element | IUIAutomationElement* | in | イベントハンドラーグループに関連付けられた UI Automation 要素へのポインター。 |
| handlerGroup | IUIAutomationEventHandlerGroup* | in | UI Automation イベントリスナーのコレクション。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
イベントの登録解除要求とイベントの受信が同時に発生した場合、ハンドラーの登録解除後にイベントがイベントハンドラーへ配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、参照カウントが 0 に達するまでイベントハンドラーオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、イベントが遅れて配信された場合にアクセス違反が発生する可能性があります。
支援技術クライアントが、プロバイダーが応答しないときにプロバイダー要求のタイムアウトを調整するかどうかを示します。(Get)
| connectionRecoveryBehaviorOptions | ConnectionRecoveryBehaviorOptions* | out | プロバイダー要求のタイムアウトを調整するかどうかを示す値。既定値は ConnectionRecoveryBehaviorOptions_Disabled です。 |
支援技術クライアントが、プロバイダーが応答しないときにプロバイダー要求のタイムアウトを調整するかどうかを示します。(Put)
| connectionRecoveryBehaviorOptions | ConnectionRecoveryBehaviorOptions | in | プロバイダー要求のタイムアウトを調整するかどうかを示す値。既定値は ConnectionRecoveryBehaviorOptions_Disabled です。 |
支援技術クライアントがすべてのイベントを受け取るか、重複するイベントを検出してフィルター処理したサブセットを受け取るかを取得または設定します。(Get)
| coalesceEventsOptions | CoalesceEventsOptions* | out | イベントがフィルター処理されるかどうかを示す値。既定値は CoalesceEventsOptions_Disabled です。 |
支援技術クライアントがすべてのイベントを受け取るか、重複するイベントを検出してフィルター処理したサブセットを受け取るかを取得または設定します。(Put)
| coalesceEventsOptions | CoalesceEventsOptions | in | イベントがフィルター処理されるかどうかを示す値。既定値は CoalesceEventsOptions_Disabled です。 |
アクティブなテキスト位置が変化したときに処理を行うメソッドを登録します。
| element | IUIAutomationElement* | in | イベントハンドラーに関連付けられた UI Automation 要素へのポインター。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体で発生するか、その先祖および子孫で発生するかを示します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationActiveTextPositionChangedEventHandler* | in | アクティブテキスト位置変更イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
アクティブなテキスト位置は、読み取り専用のテキスト要素(Web ブラウザー、Portable Document Format (PDF) ドキュメント、EPUB ドキュメントなど)の内部または要素間で、ブックマーク(またはリソース内の位置を参照するフラグメント識別子)を使用したナビゲーションイベントによって示されます。例:
- 同じ Web ページ内のブックマークへの移動
- 別の Web ページ上のブックマークへの移動
- 同じ PDF 内の別の位置へのリンクのアクティブ化
- 同じ EPUB 内の別の位置へのリンクのアクティブ化
このイベントハンドラーを使用して、ブックマーク/ターゲットの視覚的な位置を、読み取り専用テキスト要素内のフォーカス位置と同期させます。これらはブックマークやフラグメント識別子を使用すると食い違うことがあります。
たとえば、同一ページ内のアンカー(<a href="#C4">Jump to Chapter 4</a> ...<h1><a name="C4">Chapter 4</a></h1>)が呼び出されると、視覚的な位置は更新されますが、UI Automation クライアントは元の位置にとどまります。その結果、テキストの読み上げや次項目への移動などの操作が、新しい位置ではなく元の位置から開始されてしまいます。
同様に、新しいページ URI(フラグメント識別子付き: (<a href="www.blah.com#C4">Jump to Chapter 4</a>))をアクティブ化すると、新しいページが読み込まれて指定されたブックマークにジャンプしますが、UI Automation クライアントはページの先頭にとどまります。
Edit や Rich Edit コントロールなどの編集可能なテキスト要素については、SelectionChanged イベントをリッスンできます。
イベントの登録解除要求とイベントの受信が同時に発生した場合、ハンドラーの登録解除後にイベントがイベントハンドラーへ配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、参照カウントが 0 に達するまでイベントハンドラーオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、イベントが遅れて配信された場合にアクセス違反が発生する可能性があります。
アクティブテキスト位置変更イベントハンドラーを削除します。
| element | IUIAutomationElement* | in | イベントハンドラーに関連付けられた UI Automation 要素へのポインター。 |
| handler | IUIAutomationActiveTextPositionChangedEventHandler* | in | アクティブテキスト位置変更イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドは値を返しません。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
アクティブなテキスト位置は、読み取り専用のテキスト要素(Web ブラウザー、Portable Document Format (PDF) ドキュメント、EPUB ドキュメントなど)の内部または要素間で、ブックマーク(またはリソース内の位置を参照するフラグメント識別子)を使用したナビゲーションイベントによって示されます。例:
- 同じ Web ページ内のブックマークへの移動
- 別の Web ページ上のブックマークへの移動
- 同じ PDF 内の別の位置へのリンクのアクティブ化
- 同じ EPUB 内の別の位置へのリンクのアクティブ化
このイベントハンドラーを使用して、ブックマーク/ターゲットの視覚的な位置を、読み取り専用テキスト要素内のフォーカス位置と同期させます。これらはブックマークやフラグメント識別子を使用すると食い違うことがあります。
たとえば、同一ページ内のアンカー(<a href="#C4">Jump to Chapter 4</a> ...<h1><a name="C4">Chapter 4</a></h1>)が呼び出されると、視覚的な位置は更新されますが、UI Automation クライアントは元の位置にとどまります。その結果、テキストの読み上げや次項目への移動などの操作が、新しい位置ではなく元の位置から開始されてしまいます。
同様に、新しいページ URI(フラグメント識別子付き: (<a href="www.blah.com#C4">Jump to Chapter 4</a>))をアクティブ化すると、新しいページが読み込まれて指定されたブックマークにジャンプしますが、UI Automation クライアントはページの先頭にとどまります。
Edit や Rich Edit コントロールなどの編集可能なテキスト要素については、SelectionChanged イベントをリッスンできます。
イベントの登録解除要求とイベントの受信が同時に発生した場合、ハンドラーの登録解除後にイベントがイベントハンドラーへ配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、参照カウントが 0 に達するまでイベントハンドラーオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、イベントが遅れて配信された場合にアクセス違反が発生する可能性があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAutomation6 "{AAE072DA-29E3-413D-87A7-192DBF81ED10}" #usecom global IUIAutomation6 IID_IUIAutomation6 "{}" #comfunc global IUIAutomation6_CreateEventHandlerGroup 70 sptr #comfunc global IUIAutomation6_AddEventHandlerGroup 71 sptr,sptr #comfunc global IUIAutomation6_RemoveEventHandlerGroup 72 sptr,sptr #comfunc global IUIAutomation6_get_ConnectionRecoveryBehavior 73 var #comfunc global IUIAutomation6_put_ConnectionRecoveryBehavior 74 int #comfunc global IUIAutomation6_get_CoalesceEvents 75 var #comfunc global IUIAutomation6_put_CoalesceEvents 76 int #comfunc global IUIAutomation6_AddActiveTextPositionChangedEventHandler 77 sptr,int,sptr,sptr #comfunc global IUIAutomation6_RemoveActiveTextPositionChangedEventHandler 78 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAutomation6 "{AAE072DA-29E3-413D-87A7-192DBF81ED10}" #usecom global IUIAutomation6 IID_IUIAutomation6 "{}" #comfunc global IUIAutomation6_CreateEventHandlerGroup 70 sptr #comfunc global IUIAutomation6_AddEventHandlerGroup 71 sptr,sptr #comfunc global IUIAutomation6_RemoveEventHandlerGroup 72 sptr,sptr #comfunc global IUIAutomation6_get_ConnectionRecoveryBehavior 73 sptr #comfunc global IUIAutomation6_put_ConnectionRecoveryBehavior 74 int #comfunc global IUIAutomation6_get_CoalesceEvents 75 sptr #comfunc global IUIAutomation6_put_CoalesceEvents 76 int #comfunc global IUIAutomation6_AddActiveTextPositionChangedEventHandler 77 sptr,int,sptr,sptr #comfunc global IUIAutomation6_RemoveActiveTextPositionChangedEventHandler 78 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。