IAccessibleEx
COM公式ドキュメント
Microsoft Active Accessibility をサポートするコントロールについて、Microsoft UI Automation が追加情報を取得するために呼び出すメソッドを公開します。
解説(Remarks)
このインターフェースは、IAccessible インターフェースも実装しているカスタムコントロールに実装できます。これにより、完全な UI Automation プロバイダーを実装するコストをかけることなく、UI Automation のサポートを追加できます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
この要素の指定された子を表す IAccessibleEx インターフェースを取得します。
| idChild | INT | in | 子要素の識別子。 |
| pRetVal | IAccessibleEx** | out | IAccessibleEx インターフェースへのポインターを受け取ります。 |
戻り値
解説(Remarks)
この実装が子 ID を使用しない場合、指定された子に対して IAccessibleEx インターフェースを提供できない場合、または自身が子要素を表す場合、pRetVal は NULL を返します。
idChild は、独自の IAccessible インターフェースを持つオブジェクトではなく、実際の MSAA 子要素を表す必要があります。
この項目の IAccessible インターフェースと子 ID を取得します。
| ppAcc | IAccessible** | out | このオブジェクトの IAccessible インターフェースへのポインターを受け取ります。このオブジェクトが子要素である場合は親オブジェクトの IAccessible インターフェースを受け取ります。 |
| pidChild | INT* | out | 子 ID を受け取ります。このオブジェクトが子要素でない場合は CHILDID_SELF を受け取ります。 |
戻り値
この要素のランタイム識別子を取得します。
| pRetVal | SAFEARRAY** | out | ランタイム識別子へのポインターを受け取ります。 |
戻り値
解説(Remarks)
ランタイム識別子は、プロバイダーが定義する整数の配列であり、その最初の項目は UiaAppendRuntimeId でなければなりません。ランタイム識別子は親ウィンドウ内で一意でなければなりません。
MSAA-to-UIA プロキシは、(ウィンドウハンドルと合わせて)ランタイム識別子を使用して、2 つのインターフェースインスタンスが同じ基になる要素を参照しているかどうかを判断します。IAccessibleEx::GetRuntimeId が実装されていない場合、プロキシは 2 つの IAccessible オブジェクトに対してフィールドごとの比較を行って同等かどうかを判断しますが、これは効率が劣ります。
プロパティ値として返された要素の IAccessibleEx インターフェースを取得します。
| pIn | IRawElementProviderSimple* | in | プロパティとして取得された IRawElementProviderSimple インターフェースへのポインター。 |
| ppRetValOut | IAccessibleEx** | out | その要素の IAccessibleEx インターフェースへのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、Microsoft UI Automation と Microsoft Active Accessibility の間のブリッジによって実装されます。それ以外のほとんどの実装では、ppRetValOut を NULL に設定した上で E_NOTIMPL を返す必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAccessibleEx "{F8B80ADA-2C44-48D0-89BE-5FF23C9CD875}" #usecom global IAccessibleEx IID_IAccessibleEx "{}" #comfunc global IAccessibleEx_GetObjectForChild 3 int,sptr #comfunc global IAccessibleEx_GetIAccessiblePair 4 sptr,var #comfunc global IAccessibleEx_GetRuntimeId 5 var #comfunc global IAccessibleEx_ConvertReturnedElement 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAccessibleEx "{F8B80ADA-2C44-48D0-89BE-5FF23C9CD875}" #usecom global IAccessibleEx IID_IAccessibleEx "{}" #comfunc global IAccessibleEx_GetObjectForChild 3 int,sptr #comfunc global IAccessibleEx_GetIAccessiblePair 4 sptr,sptr #comfunc global IAccessibleEx_GetRuntimeId 5 sptr #comfunc global IAccessibleEx_ConvertReturnedElement 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。