IAccPropServer
COM公式ドキュメント
アクセス可能な要素のプロパティ値を取得するメソッドを公開します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アクセス可能な要素のプロパティ値を取得します。
| pIDString | BYTE* | in | 要求されているプロパティを識別する文字列を格納します。 |
| dwIDStringLen | DWORD | in | pIDString パラメーターで指定される識別文字列の長さを指定します。 |
| idProp | GUID | in | 目的のプロパティを示す GUID を指定します。 |
| pvarValue | VARIANT* | out | オーバーライドされたプロパティの値を指定します。このパラメーターは pfHasProp が TRUE の場合にのみ有効です。pfHasProp が FALSE に設定されている場合、サーバーはこれを VT_EMPTY に設定する必要があります。 |
| pfHasProp | BOOL* | out | サーバーが要求されたプロパティの値を提供するかどうかを示します。オーバーライドするプロパティを返す場合、サーバーはこれを TRUE に設定し、プロパティを返さない場合は FALSE に設定する必要があります(この場合、pvarValue も VT_EMPTY に設定する必要があります)。 |
戻り値
型: HRESULT
メモリ不足などの例外的なエラー条件を除き、S_OK を返します。指定されたプロパティがオーバーライドされていない場合、サーバーは pfHasProp を FALSE に、pvarValue を VT_EMPTY に設定する必要があります。
解説(Remarks)
複数のアクセス可能な要素に注釈を付けるために単一のコールバックオブジェクトが登録されている場合、識別文字列を使用してこの要求がどの要素を参照しているかを判別できます。
アクセス可能な要素が HWND ベースの場合、IAccPropServices::DecomposeHwndIdentityString を使用して識別文字列から HWND/idObject/idChild を抽出できます。
コールバックが指定されたプロパティに対して返す値を持っている場合、その値を pvarValue に返し、pfHasProp を TRUE に設定する必要があります。そうでない場合は、pvarValue を VT_EMPTY に、pfHasProp を FALSE に設定する必要があります。後者の場合、このプロパティの値を取得するために元の IAccessible インターフェイスポインターが使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAccPropServer "{76C0DBBB-15E0-4E7B-B61B-20EEEA2001E0}" #usecom global IAccPropServer IID_IAccPropServer "{}" #comfunc global IAccPropServer_GetPropValue 3 var,int,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IAccPropServer "{76C0DBBB-15E0-4E7B-B61B-20EEEA2001E0}" #usecom global IAccPropServer IID_IAccPropServer "{}" #comfunc global IAccPropServer_GetPropValue 3 sptr,int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。