IUIAutomationEventHandlerGroup
COM公式ドキュメント
IUIAutomation6 で定義される CreateEventHandlerGroup および AddEventHandlerGroup メソッドを通じて一括登録するために、1 つ以上のイベントをコレクションに追加するメソッドを公開します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アクティブなテキスト位置が変化したときに処理するメソッドを(イベントハンドラーグループに)登録します。
| 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 イベントをリッスンできます。
Microsoft UI Automation イベントを処理するメソッドを登録します。
| eventId | UIA_EVENT_ID | in | メソッドが処理するイベントの識別子。イベント ID の一覧については、Event Identifiers を参照してください。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子孫に対するものかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
変更イベントを処理するメソッドを登録します。
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子孫に対するものかを指定します。 |
| changeTypes | INT* | in | イベントが表す変更の種類を示す整数のリストへのポインター。 |
| changesCount | INT | in | このイベントで発生した変更の数。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationChangesEventHandler* | in | 変更イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
通知イベントを処理するメソッドを登録します。
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子孫に対するものかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationNotificationEventHandler* | in | 通知イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
プロパティ変更イベントを処理するメソッドを登録します。
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子に対するものかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationPropertyChangedEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
| propertyArray | UIA_PROPERTY_ID* | in | 対象とする UI Automation プロパティへのポインター。プロパティ ID の一覧については、Property Identifiers を参照してください。 |
| propertyCount | INT | in | 監視するプロパティの数。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
構造変更イベントを処理するメソッドを登録します。
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子孫に対するものかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationStructureChangedEventHandler* | in | 構造変更イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
プログラムによるテキスト編集イベントを処理するメソッドを登録します。
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体に対するものか、その先祖および子孫に対するものかを指定します。 |
| textEditChangeType | TextEditChangeType | in | リッスンする特定の変更の種類。クライアントはテキスト編集の変更の種類ごとに個別に登録します。これにより、UI Automation システムは実行時に登録済みのリスナーを確認でき、リスナーが存在しない場合に特定のテキスト編集の変更に対するイベントの発生を回避できます。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationTextEditTextChangedEventHandler* | in | プログラムによるテキスト編集イベントを処理するオブジェクトへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントハンドラーを実装する前に、Understanding Threading Issues で説明されているスレッド処理の問題を理解しておく必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAutomationEventHandlerGroup "{C9EE12F2-C13B-4408-997C-639914377F4E}" #usecom global IUIAutomationEventHandlerGroup IID_IUIAutomationEventHandlerGroup "{}" #comfunc global IUIAutomationEventHandlerGroup_AddActiveTextPositionChangedEventHandler 3 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddAutomationEventHandler 4 int,int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddChangesEventHandler 5 int,var,int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddNotificationEventHandler 6 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddPropertyChangedEventHandler 7 int,sptr,sptr,var,int #comfunc global IUIAutomationEventHandlerGroup_AddStructureChangedEventHandler 8 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddTextEditTextChangedEventHandler 9 int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAutomationEventHandlerGroup "{C9EE12F2-C13B-4408-997C-639914377F4E}" #usecom global IUIAutomationEventHandlerGroup IID_IUIAutomationEventHandlerGroup "{}" #comfunc global IUIAutomationEventHandlerGroup_AddActiveTextPositionChangedEventHandler 3 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddAutomationEventHandler 4 int,int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddChangesEventHandler 5 int,sptr,int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddNotificationEventHandler 6 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddPropertyChangedEventHandler 7 int,sptr,sptr,sptr,int #comfunc global IUIAutomationEventHandlerGroup_AddStructureChangedEventHandler 8 int,sptr,sptr #comfunc global IUIAutomationEventHandlerGroup_AddTextEditTextChangedEventHandler 9 int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。