IUIAutomation
COM公式ドキュメント
Microsoft UI Automation クライアントアプリケーションが UI Automation 要素を検出、アクセス、フィルタリングできるようにするメソッドを公開します。
解説(Remarks)
すべての UI Automation クライアントアプリケーションは、UI Automation の機能にアクセスするために、CUIAutomation オブジェクトに対するこのインターフェイスを取得する必要があります。
次のサンプル関数は、CUIAutomation オブジェクトを作成し、IUIAutomation インターフェイスを取得します。
IUIAutomation *g_pAutomation;
BOOL InitializeUIAutomation()
{
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(__uuidof(CUIAutomation), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IUIAutomation), (void**)&g_pAutomation);
return (SUCCEEDED(hr));
}
メソッド 55
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
2 つの UI Automation 要素を比較し、それらが同じ基になる UI 要素を表しているかどうかを判定します。
| el1 | IUIAutomationElement* | in | 比較する 1 つ目の要素へのポインター。 |
| el2 | IUIAutomationElement* | in | 比較する 2 つ目の要素へのポインター。 |
| areSame | BOOL* | out | 要素の実行時識別子が同じ場合は TRUE、それ以外の場合は FALSE を受け取ります。 |
戻り値
実行時識別子 (ID) を格納した 2 つの整数配列を比較し、その内容が同じで同一の UI 要素に属しているかどうかを判定します。
| runtimeId1 | SAFEARRAY* | in | 比較する 1 つ目の ID。 |
| runtimeId2 | SAFEARRAY* | in | 比較する 2 つ目の ID。 |
| areSame | BOOL* | out | ID が同じ場合は TRUE、それ以外の場合は FALSE を受け取ります。 |
戻り値
デスクトップを表す UI Automation 要素を取得します。
| root | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
ルート要素は、FindAll メソッドや FindFirst メソッドを使用して他の要素を検索するための起点として利用できます。
ルート要素から検索する場合は、検索のスコープに TreeScope_Descendants ではなく TreeScope_Children を必ず指定してください。デスクトップのサブツリー全体を検索すると、数千個の項目を反復処理することになり、スタックオーバーフローを引き起こす可能性があります。
指定したウィンドウに対応する UI Automation 要素を取得します。
| hwnd | HWND | in | ウィンドウハンドル。 |
| element | IUIAutomationElement** | out | 要素へのポインターを受け取ります。 |
戻り値
デスクトップ上の指定した位置にある UI Automation 要素を取得します。
| pt | POINT | in | UI Automation 要素のデスクトップ座標。 |
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
IUIAutomation::ElementFromPoint メソッドは、メソッドが戻る時点でその位置にある要素が既に削除されている場合、UIA_E_ELEMENTNOTAVAILABLE エラーコードを返します。クライアントは、このメソッドから返されるエラーを適切に処理する必要があります。たとえば、呼び出しを再試行するなどの方法があります。
入力フォーカスを持つ UI Automation 要素を取得します。
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
IUIAutomation::GetFocusedElement メソッドは、メソッドが戻る時点でフォーカスを持つ要素が既に削除されている場合、UIA_E_ELEMENTNOTAVAILABLE エラーコードを返します。クライアントは、このメソッドから返されるエラーを適切に処理する必要があります。たとえば、呼び出しを再試行するなどの方法があります。
デスクトップを表す UI Automation 要素を取得し、要求されたプロパティとコントロールパターンをプリフェッチして、プリフェッチした項目をキャッシュに格納します。
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュに格納するプロパティとコントロールパターンを指定するキャッシュ要求へのポインター。 |
| root | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
ルート要素は、FindAll メソッドや FindFirst メソッドを使用して他の要素を検索するための起点として利用できます。
ルート要素から検索する場合は、検索のスコープに TreeScope_Descendants ではなく TreeScope_Children を必ず指定してください。デスクトップのサブツリー全体を検索すると、数千個の項目を反復処理することになり、スタックオーバーフローを引き起こす可能性があります。
指定したウィンドウに対応する UI Automation 要素を取得し、要求されたプロパティとコントロールパターンをプリフェッチして、プリフェッチした項目をキャッシュに格納します。
| hwnd | HWND | in | ウィンドウハンドル。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュに格納するプロパティとコントロールパターンを指定するキャッシュ要求へのポインター。 |
| element | IUIAutomationElement** | out | 要素へのポインターを受け取ります。 |
戻り値
デスクトップ上の指定した位置にある UI Automation 要素を取得し、要求されたプロパティとコントロールパターンをプリフェッチして、プリフェッチした項目をキャッシュに格納します。
| pt | POINT | in | UI Automation 要素のデスクトップ座標。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュに格納するプロパティとコントロールパターンを指定するキャッシュ要求へのポインター。 |
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
入力フォーカスを持つ UI Automation 要素を取得し、要求されたプロパティとコントロールパターンをプリフェッチして、プリフェッチした項目をキャッシュに格納します。
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュに格納するプロパティとコントロールパターンを指定するキャッシュ要求へのポインター。 |
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
Microsoft UI Automation ツリーの走査に使用できるツリーウォーカーオブジェクトを取得します。
| pCondition | IUIAutomationCondition* | in | 対象とする要素を指定する条件へのポインター。 |
| walker | IUIAutomationTreeWalker** | out | ツリーウォーカーオブジェクトへのポインターを受け取ります。 |
戻り値
コントロール要素を検出するために使用する IUIAutomationTreeWalker インターフェイスを取得します。
| walker | IUIAutomationTreeWalker** | out | コントロールビュー用に事前定義されたツリーウォーカーを受け取るポインタである。 |
コンテンツ要素を検出するために使用する IUIAutomationTreeWalker インターフェイスを取得します。
| walker | IUIAutomationTreeWalker** | out | コンテンツビュー用に事前定義されたツリーウォーカーを受け取るポインタである。 |
Microsoft UI Automation ツリーのフィルター処理されていないビューを走査するために使用するツリーウォーカーオブジェクトを取得します。
| walker | IUIAutomationTreeWalker** | out | Raw ビュー用に事前定義されたツリーウォーカーを受け取るポインタである。 |
フィルター処理されていないビュー内のすべての UI 要素を選択する、定義済みの IUIAutomationCondition インターフェイスを取得します。
| condition | IUIAutomationCondition** | out | Raw ビューを表す事前定義済み条件を受け取るポインタである。 |
解説(Remarks)
この条件を単独で使用した場合、その機能は IUIAutomation::CreateTrueCondition で取得される条件とまったく同じです。
コントロール要素を選択する、定義済みの IUIAutomationCondition インターフェイスを取得します。
| condition | IUIAutomationCondition** | out | コントロールビューを表す事前定義済み条件を受け取るポインタである。 |
コンテンツ要素を選択する、定義済みの IUIAutomationCondition インターフェイスを取得します。
| condition | IUIAutomationCondition** | out | コンテンツビューを表す事前定義済み条件を受け取るポインタである。 |
キャッシュ要求を作成します。
| cacheRequest | IUIAutomationCacheRequest** | out | IUIAutomationCacheRequest インターフェイスへのポインターを受け取る変数のアドレス。 |
戻り値
解説(Remarks)
IUIAutomationCacheRequest インターフェイスを取得した後、そのメソッドを使用して、UI Automation 要素を取得する際にキャッシュするプロパティとコントロールパターンを指定します。
すべての要素を選択する、定義済みの条件を取得します。
| newCondition | IUIAutomationCondition** | out | 真 (true) 条件へのポインターを受け取ります。 |
戻り値
常に偽 (false) となる条件を作成します。
| newCondition | IUIAutomationCondition** | out | 偽 (false) 条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、IUIAutomation::CreateTrueCondition との対称性のためだけに存在します。偽 (false) 条件は UI Automation 要素との一致を有効にすることは決してなく、他のどの条件と組み合わせても有用にはなりません。
指定した値を持つプロパティを備えた要素を選択する条件を作成します。
| propertyId | UIA_PROPERTY_ID | in | プロパティ識別子。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
| value | VARIANT | in | プロパティ値。 |
| newCondition | IUIAutomationCondition** | out | 新しい条件へのポインターを受け取ります。 |
戻り値
オプションのフラグを使用して、指定した値を持つプロパティを備えた要素を選択する条件を作成します。
| propertyId | UIA_PROPERTY_ID | in | プロパティ識別子。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
| value | VARIANT | in | プロパティ値。 |
| flags | PropertyConditionFlags | in | 条件の属性。大文字と小文字を区別しないプロパティ条件を作成するには、PropertyConditionFlags_IgnoreCase を使用します。 |
| newCondition | IUIAutomationCondition** | out | 新しい条件へのポインターを受け取ります。 |
戻り値
2 つの条件の両方に一致する要素を選択する条件を作成します。
| condition1 | IUIAutomationCondition* | in | 一致させる 1 つ目の条件へのポインター。 |
| condition2 | IUIAutomationCondition* | in | 一致させる 2 つ目の条件へのポインター。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
3 つ以上の単純な条件を結合する条件は、IUIAutomation::CreateAndConditionFromArray または IUIAutomation::CreateAndConditionFromNativeArray を使用して作成できます。
CreateAndCondition メソッドは、condition1 ポインターと condition2 ポインターに対して AddRef を呼び出します。つまり、CreateAndCondition の呼び出しが戻った後にこれら 2 つのポインターに対して Release を呼び出しても、CreateAndCondition から返されたポインターは無効になりません。CreateAndCondition から返されたポインターに対して Release を呼び出すと、UI Automation は condition1 ポインターと condition2 ポインターに対して Release を呼び出します。
複数の条件に基づいて要素を選択する条件を作成します。これらの条件はすべて真である必要があります。
| conditions | SAFEARRAY* | in | 結合する条件へのポインター。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、conditions 配列内の各ポインターに対して AddRef を呼び出します。つまり、CreateAndConditionFromArray の呼び出しが戻った後にこれらのポインターに対して Release を呼び出しても、CreateAndConditionFromArray から返されたポインターは無効になりません。CreateAndConditionFromArray から返されたポインターに対して Release を呼び出すと、UI Automation は conditions 配列内の各ポインターに対して Release を呼び出します。
ネイティブ配列から、すべて真である必要がある複数の条件に基づいて要素を選択する条件を作成します。
| conditions | IUIAutomationCondition** | in | 結合する条件の配列へのポインター。 |
| conditionCount | INT | in | conditions 配列内の要素数。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、conditions 配列内の各ポインターに対して AddRef を呼び出します。つまり、CreateAndConditionFromNativeArray の呼び出しが戻った後にこれらのポインターに対して Release を呼び出しても、CreateAndConditionFromNativeArray から返されたポインターは無効になりません。CreateAndConditionFromNativeArray から返されたポインターに対して Release を呼び出すと、UI Automation は conditions 配列内の各ポインターに対して Release を呼び出します。
2 つの条件を組み合わせ、いずれかの条件が真の場合に一致とする条件を作成します。
| condition1 | IUIAutomationCondition* | in | 1 つ目の条件へのポインター。 |
| condition2 | IUIAutomationCondition* | in | 2 つ目の条件へのポインター。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
CreateOrCondition メソッドは、condition1 ポインターと condition2 ポインターに対して AddRef を呼び出します。つまり、CreateOrCondition の呼び出しが戻った後にこれら 2 つのポインターに対して Release を呼び出しても、CreateOrCondition から返されたポインターは無効になりません。CreateOrCondition から返されたポインターに対して Release を呼び出すと、UI Automation は condition1 ポインターと condition2 ポインターに対して Release を呼び出します。
2 つ以上の条件を組み合わせ、いずれかの条件が真の場合に一致とする条件を作成します。
| conditions | SAFEARRAY* | in | 条件へのポインター。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、conditions 配列内の各ポインターに対して AddRef を呼び出します。つまり、CreateOrConditionFromArray の呼び出しが戻った後にこれらのポインターに対して Release を呼び出しても、CreateOrConditionFromArray から返されたポインターは無効になりません。CreateOrConditionFromArray から返されたポインターに対して Release を呼び出すと、UI Automation は conditions 配列内の各ポインターに対して Release を呼び出します。
2 つ以上の条件を組み合わせ、いずれか 1 つの条件が真の場合に一致とする条件を作成します。
| conditions | IUIAutomationCondition** | in | 結合する条件の配列へのポインター。 |
| conditionCount | INT | in | conditions 内の要素数。 |
| newCondition | IUIAutomationCondition** | out | 結合された条件へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、conditions 配列内の各ポインターに対して AddRef を呼び出します。つまり、CreateOrConditionFromNativeArray の呼び出しが戻った後にこれらのポインターに対して Release を呼び出しても、CreateOrConditionFromNativeArray から返されたポインターは無効になりません。CreateOrConditionFromNativeArray から返されたポインターに対して Release を呼び出すと、UI Automation は conditions 配列内の各ポインターに対して Release を呼び出します。
指定した条件の否定となる条件を作成します。
| condition | IUIAutomationCondition* | in | 元の条件へのポインター。 |
| newCondition | IUIAutomationCondition** | out | condition パラメーターで指定された元の条件の否定へのポインターを受け取ります。 |
戻り値
解説(Remarks)
CreateNotCondition メソッドは、condition ポインターに対して AddRef を呼び出します。つまり、CreateNotCondition の呼び出しが戻った後にそのポインターに対して Release を呼び出しても、CreateNotCondition から返されたポインターは無効になりません。CreateNotCondition から返されたポインターに対して Release を呼び出すと、UI Automation は condition ポインターに対して Release を呼び出します。
Microsoft UI Automation イベントを処理するメソッドを登録します。メモ イベントハンドラーを実装する前に、「Understanding Threading Issues」で説明されているスレッド処理の問題を理解しておく必要があります。
| eventId | UIA_EVENT_ID | in | メソッドが処理するイベントの識別子。イベント ID の一覧については、「Event Identifiers」を参照してください。 |
| element | IUIAutomationElement* | in | イベントハンドラーに関連付ける UI Automation 要素へのポインター。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体で発生するか、その先祖や子孫で発生するかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
指定した UI Automation イベントハンドラーを削除します。
| eventId | UIA_EVENT_ID | in | 処理対象のイベントの識別子。イベント ID の一覧については、「Event Identifiers」を参照してください。 |
| element | IUIAutomationElement* | in | イベントを処理している UI Automation 要素へのポインター。 |
| handler | IUIAutomationEventHandler* | in | 指定したイベント識別子と UI Automation 要素に対して IUIAutomation::AddAutomationEventHandler に渡されたハンドラーメソッドへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
ハンドラーの登録解除と同時にイベントが受信された場合、登録解除後にそのハンドラーへイベントが配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、イベントハンドラーオブジェクトの参照カウントが 0 に達するまでそのオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、遅れて配信されたイベントによってアクセス違反が発生する可能性があります。
プロパティ変更イベントのネイティブ配列を処理するメソッドを登録します。
| element | IUIAutomationElement* | in | イベントハンドラーに関連付けられた UI Automation 要素へのポインター。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体で発生するか、その先祖や子で発生するかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationPropertyChangedEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
| propertyArray | UIA_PROPERTY_ID* | in | 対象とする UI Automation プロパティの識別子へのポインター。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
| propertyCount | INT | in | propertyArray 内のプロパティ識別子の数。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
例
クライアントが Microsoft UI Automation イベント (AddPropertyChangedEventHandlerNativeArray を含む) を受信して処理できるようにするインターフェイスの実装方法を示すコード例については、「How to Implement Event Handlers」を参照してください。
解説(Remarks)
element で指定された UI 項目は、propertyArray パラメーターで指定されたプロパティをサポートしていない場合があります。
このメソッドは IUIAutomation::AddPropertyChangedEventHandler と同じ目的を持ちますが、SAFEARRAY ではなく通常のプロパティ識別子の配列を受け取ります。
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
プロパティ変更イベントの配列を処理するメソッドを登録します。
| element | IUIAutomationElement* | in | イベントハンドラーに関連付けられた UI Automation 要素へのポインター。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体で発生するか、その先祖や子で発生するかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationPropertyChangedEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
| propertyArray | SAFEARRAY* | in | 対象とする UI Automation プロパティへのポインター。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
戻り値
解説(Remarks)
element で指定された UI 項目は、propertyArray パラメーターで指定されたプロパティをサポートしていない場合があります。
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
プロパティ変更イベントハンドラーを削除します。
| element | IUIAutomationElement* | in | ハンドラーを削除する対象の UI Automation 要素へのポインター。 |
| handler | IUIAutomationPropertyChangedEventHandler* | in | IUIAutomation::AddPropertyChangedEventHandler に渡されたインターフェイスへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
ハンドラーの登録解除と同時にイベントが受信された場合、登録解除後にそのハンドラーへイベントが配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、イベントハンドラーオブジェクトの参照カウントが 0 に達するまでそのオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、遅れて配信されたイベントによってアクセス違反が発生する可能性があります。
構造変更イベントを処理するメソッドを登録します。メモ イベントハンドラーを実装する前に、「Understanding Threading Issues」で説明されているスレッド処理の問題を理解しておく必要があります。
| element | IUIAutomationElement* | in | イベントハンドラーに関連付けられた UI Automation 要素へのポインター。 |
| scope | TreeScope | in | 処理するイベントのスコープ。つまり、イベントが要素自体で発生するか、その先祖や子孫で発生するかを指定します。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationStructureChangedEventHandler* | in | 構造変更イベントを処理するオブジェクトへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
構造変更イベントハンドラーを削除します。
| element | IUIAutomationElement* | in | ハンドラーを削除する対象の UI Automation 要素へのポインター。 |
| handler | IUIAutomationStructureChangedEventHandler* | in | IUIAutomation::AddStructureChangedEventHandler に渡されたインターフェイスへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
ハンドラーの登録解除と同時にイベントが受信された場合、登録解除後にそのハンドラーへイベントが配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、イベントハンドラーオブジェクトの参照カウントが 0 に達するまでそのオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、遅れて配信されたイベントによってアクセス違反が発生する可能性があります。
フォーカス変更イベントを処理するメソッドを登録します。メモ イベントハンドラーを実装する前に、「Understanding Threading Issues」で説明されているスレッド処理の問題を理解しておく必要があります。
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュ要求へのポインター。キャッシュが不要な場合は NULL。 |
| handler | IUIAutomationFocusChangedEventHandler* | in | イベントを処理するオブジェクトへのポインター。 |
戻り値
解説(Remarks)
フォーカス変更イベントはシステム全体に及ぶため、より狭いスコープを設定することはできません。
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
例
次のサンプル関数は、IUIAutomationFocusChangedEventHandler を実装するオブジェクトを作成し、ハンドラーを追加してイベントをサブスクライブします。
HRESULT AddFocusHandler(IUIAutomation* pAutomation)
{
// CFocusHandler is a class that implements IUIAutomationFocusChangedEventHandler.
CFocusHandler* pFocusHandler = new CFocusHandler();
if (!pFocusHandler)
{
return E_OUTOFMEMORY;
}
IUIAutomationFocusChangedEventHandler* pHandler;
pFocusHandler->QueryInterface(IID_IUIAutomationFocusChangedEventHandler, (void**)&pHandler);
HRESULT hr = pAutomation->AddFocusChangedEventHandler(NULL, pHandler);
pFocusHandler->Release();
return hr;
}
フォーカス変更イベントハンドラーを削除します。
| handler | IUIAutomationFocusChangedEventHandler* | in | IUIAutomation::AddFocusChangedEventHandler に渡されたイベントハンドラーへのポインター。 |
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
ハンドラーの登録解除と同時にイベントが受信された場合、登録解除後にそのハンドラーへイベントが配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、イベントハンドラーオブジェクトの参照カウントが 0 に達するまでそのオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、遅れて配信されたイベントによってアクセス違反が発生する可能性があります。
登録されているすべての Microsoft UI Automation イベントハンドラーを削除します。
戻り値
解説(Remarks)
UI Automation クライアントは、イベントハンドラーの追加や削除に複数のスレッドを使用しないでください。同一クライアントプロセス内で、あるイベントハンドラーの追加や削除が行われている最中に別のイベントハンドラーの追加や削除が行われると、予期しない動作が生じる可能性があります。
ハンドラーの登録解除と同時にイベントが受信された場合、登録解除後にそのハンドラーへイベントが配信されることがあります。ベストプラクティスは、Component Object Model (COM) の標準に従い、イベントハンドラーオブジェクトの参照カウントが 0 に達するまでそのオブジェクトを破棄しないことです。イベントの登録解除直後にイベントハンドラーを破棄すると、遅れて配信されたイベントによってアクセス違反が発生する可能性があります。
整数の配列を SAFEARRAY に変換します。
| array | INT* | in | 整数の配列へのポインター。 |
| arrayCount | INT | in | array 内の要素数。 |
| safeArray | SAFEARRAY** | out | 割り当てられた SAFEARRAY へのポインターを受け取ります。 |
戻り値
整数の SAFEARRAY を配列に変換します。
| intArray | SAFEARRAY* | in | 変換する SAFEARRAY へのポインター。 |
| array | INT** | out | 割り当てられた配列へのポインターを受け取ります。 |
| arrayCount | INT* | out | array 内の要素数を受け取ります。 |
戻り値
四角形の座標を格納した VARIANT を作成します。
| rc | RECT | in | 四角形の座標を格納した構造体へのポインター。 |
| var | VARIANT* | out | 四角形の座標を受け取ります。 |
戻り値
解説(Remarks)
四角形の座標を格納した VARIANT を RECT に変換します。
| var | VARIANT | in | 四角形の座標。 |
| rc | RECT* | out | 変換された四角形の座標を受け取ります。 |
戻り値
四角形の座標を格納した SAFEARRAY を RECT 型の配列に変換します。
| rects | SAFEARRAY* | in | 四角形の座標を格納した配列へのポインター。 |
| rectArray | RECT** | out | 四角形の座標を格納した構造体の配列へのポインターを受け取ります。 |
| rectArrayCount | INT* | out | rectArray 内の要素数を受け取ります。 |
戻り値
プロキシファクトリオブジェクトの新しいインスタンスを作成します。
| factory | IUIAutomationProxyFactory* | in | プロキシファクトリオブジェクトへのポインター。 |
| factoryEntry | IUIAutomationProxyFactoryEntry** | out | 新しく作成されたプロキシファクトリオブジェクトのインスタンスへのポインターを受け取ります。 |
戻り値
解説(Remarks)
IUIAutomationProxyFactoryMapping インターフェイスを使用して、利用可能なプロキシのテーブルにプロキシファクトリを登録します。
ウィンドウクラス名および関連データと個々のプロキシファクトリとのマッピングを表すオブジェクトを取得します。
| factoryMapping | IUIAutomationProxyFactoryMapping** | out | プロキシファクトリのマッピングオブジェクトを受け取るポインタである。 |
プロパティの登録済みプログラム名を取得します。
| property | UIA_PROPERTY_ID | in | プロパティ識別子。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
| name | LPWSTR* | out | 登録済みのプログラム名を受け取ります。 |
戻り値
解説(Remarks)
プログラム名はデバッグおよび診断の目的のみを想定しています。この文字列はローカライズされません。
このプロパティを文字列の比較に使用しないでください。2 つのプロパティが同じかどうかを判定するには、プロパティ識別子を直接比較してください。
コントロールパターンの登録済みプログラム名を取得します。
| pattern | UIA_PATTERN_ID | in | コントロールパターンの識別子。コントロールパターン ID の一覧については、「Control Pattern Identifiers」を参照してください。 |
| name | LPWSTR* | out | 登録済みのプログラム名を受け取ります。 |
戻り値
解説(Remarks)
プログラム名はデバッグおよび診断の目的のみを想定しています。この文字列はローカライズされません。
このプロパティを文字列の比較に使用しないでください。2 つのコントロールパターンが同じかどうかを判定するには、コントロールパターン識別子を直接比較してください。
UI Automation 要素でサポートされている可能性のあるコントロールパターンを取得します。
| pElement | IUIAutomationElement* | in | ポーリングする要素のアドレス。 |
| patternIds | SAFEARRAY** | out | コントロールパターン識別子の配列へのポインターを受け取ります。 |
| patternNames | SAFEARRAY** | out | コントロールパターン名の配列へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、プロパティをスキャンする必要がある Microsoft UI Automation ツールでの使用のみを想定しています。UI Automation クライアントでの使用は想定されていません。
後でその要素に問い合わせたときに、特定のコントロールパターンをサポートしている保証はありません。
UI Automation 要素でサポートされている可能性のあるプロパティを取得します。
| pElement | IUIAutomationElement* | in | ポーリングする UI Automation 要素のアドレス。 |
| propertyIds | SAFEARRAY** | out | プロパティ識別子の配列へのポインターを受け取ります。プロパティ ID の一覧については、「Property Identifiers」を参照してください。 |
| propertyNames | SAFEARRAY** | out | プロパティ名の配列へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、プロパティとコントロールパターンをスキャンする必要がある Microsoft UI Automation ツールでの使用のみを想定しています。UI Automation クライアントでの使用は想定されていません。
後でその要素に問い合わせたときに、特定のプロパティをサポートしている保証はありません。
指定された VARIANT に Not Supported 識別子が含まれているかどうかを確認します。
| value | VARIANT | in | 確認する値。 |
| isNotSupported | BOOL* | out | 指定された VARIANT に Not Supported 識別子が含まれている場合は TRUE、それ以外の場合は FALSE を受け取ります。 |
戻り値
解説(Remarks)
UI Automation 要素のプロパティを取得した後、このメソッドを呼び出して、その要素が取得したプロパティをサポートしているかどうかを判定します。CheckNotSupported は、通常、GetCurrentPropertyValue などのプロパティ取得メソッドを呼び出した後に呼び出します。
サポートされていないプロパティまたはテキスト属性を表す静的なトークンオブジェクトを取得します。
| notSupportedValue | IUnknown** | out | 「サポートされていない」を表す予約値オブジェクトを受け取るポインタである。 |
解説(Remarks)
このオブジェクトは、IUIAutomationElement::GetCurrentPropertyValue または IUIAutomationTextRange::GetAttributeValue の結果との比較に使用できます。
混在属性であるテキスト属性を表す静的なトークンオブジェクトを取得します。
| mixedAttributeValue | IUnknown** | out | 「複数の異なる値が混在」を表す予約値オブジェクトを受け取るポインタである。 |
解説(Remarks)
IUIAutomation::ReservedMixedAttributeValue で取得されるオブジェクトは、IUIAutomationTextRange::GetAttributeValue の結果との比較に使用でき、テキスト範囲が特定のテキスト属性に対して複数の値を含んでいるかどうかを判定できます。
Microsoft Active Accessibility サーバーから、指定したアクセス可能オブジェクトに対応する UI Automation 要素を取得します。
| accessible | IAccessible* | in | アクセス可能オブジェクトの IAccessible インターフェイスへのポインター。 |
| childId | INT | in | アクセス可能オブジェクトの子 ID。 |
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドを使用すると、UI Automation クライアントは、Microsoft Active Accessibility サーバーによって実装されたアクセス可能オブジェクトの IUIAutomationElement インターフェイスを取得できます。
サーバーが Microsoft Active Accessibility のサポートと併せて UI Automation プロバイダーインターフェイスを実装している場合、このメソッドは失敗することがあります。
Microsoft UI Automation 要素の基になる実装がネイティブの Microsoft Active Accessibility サーバーでない場合、このメソッドは E_INVALIDARG を返します。つまり、Oleacc.dll のプロキシオブジェクトや UIA-to-MSAA ブリッジによって元々サポートされている要素に対して、クライアントが IAccessible インターフェイスを取得しようとした場合です。
Microsoft Active Accessibility サーバーから、指定したアクセス可能オブジェクトに対応する UI Automation 要素を取得し、要求されたプロパティとコントロールパターンをプリフェッチして、プリフェッチした項目をキャッシュに格納します。
| accessible | IAccessible* | in | アクセス可能オブジェクトの IAccessible インターフェイスへのポインター。 |
| childId | INT | in | アクセス可能オブジェクトの子 ID。 |
| cacheRequest | IUIAutomationCacheRequest* | in | キャッシュに格納するプロパティとコントロールパターンを指定するキャッシュ要求のアドレス。 |
| element | IUIAutomationElement** | out | UI Automation 要素へのポインターを受け取ります。 |
戻り値
解説(Remarks)
このメソッドを使用すると、Microsoft UI Automation クライアントは、Microsoft Active Accessibility サーバーによって実装されたアクセス可能オブジェクトの IUIAutomationElement インターフェイスを取得できます。
サーバーが Microsoft Active Accessibility のサポートと併せて UI Automation プロバイダーインターフェイスを実装している場合、このメソッドは失敗することがあります。
UI Automation 要素の基になる実装がネイティブの Microsoft Active Accessibility サーバーでない場合、このメソッドは E_INVALIDARG を返します。つまり、Oleacc.dll のプロキシオブジェクトや UIA-to-MSAA ブリッジによって元々サポートされている要素に対して、クライアントが IAccessible インターフェイスを取得しようとした場合です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAutomation "{30CBE57D-D9D0-452A-AB13-7AC5AC4825EE}" #usecom global IUIAutomation IID_IUIAutomation "{}" #comfunc global IUIAutomation_CompareElements 3 sptr,sptr,var #comfunc global IUIAutomation_CompareRuntimeIds 4 var,var,var #comfunc global IUIAutomation_GetRootElement 5 sptr #comfunc global IUIAutomation_ElementFromHandle 6 sptr,sptr #comfunc global IUIAutomation_ElementFromPoint 7 int,sptr #comfunc global IUIAutomation_GetFocusedElement 8 sptr #comfunc global IUIAutomation_GetRootElementBuildCache 9 sptr,sptr #comfunc global IUIAutomation_ElementFromHandleBuildCache 10 sptr,sptr,sptr #comfunc global IUIAutomation_ElementFromPointBuildCache 11 int,sptr,sptr #comfunc global IUIAutomation_GetFocusedElementBuildCache 12 sptr,sptr #comfunc global IUIAutomation_CreateTreeWalker 13 sptr,sptr #comfunc global IUIAutomation_get_ControlViewWalker 14 sptr #comfunc global IUIAutomation_get_ContentViewWalker 15 sptr #comfunc global IUIAutomation_get_RawViewWalker 16 sptr #comfunc global IUIAutomation_get_RawViewCondition 17 sptr #comfunc global IUIAutomation_get_ControlViewCondition 18 sptr #comfunc global IUIAutomation_get_ContentViewCondition 19 sptr #comfunc global IUIAutomation_CreateCacheRequest 20 sptr #comfunc global IUIAutomation_CreateTrueCondition 21 sptr #comfunc global IUIAutomation_CreateFalseCondition 22 sptr #comfunc global IUIAutomation_CreatePropertyCondition 23 int,int,sptr #comfunc global IUIAutomation_CreatePropertyConditionEx 24 int,int,int,sptr #comfunc global IUIAutomation_CreateAndCondition 25 sptr,sptr,sptr #comfunc global IUIAutomation_CreateAndConditionFromArray 26 var,sptr #comfunc global IUIAutomation_CreateAndConditionFromNativeArray 27 sptr,int,sptr #comfunc global IUIAutomation_CreateOrCondition 28 sptr,sptr,sptr #comfunc global IUIAutomation_CreateOrConditionFromArray 29 var,sptr #comfunc global IUIAutomation_CreateOrConditionFromNativeArray 30 sptr,int,sptr #comfunc global IUIAutomation_CreateNotCondition 31 sptr,sptr #comfunc global IUIAutomation_AddAutomationEventHandler 32 int,sptr,int,sptr,sptr #comfunc global IUIAutomation_RemoveAutomationEventHandler 33 int,sptr,sptr #comfunc global IUIAutomation_AddPropertyChangedEventHandlerNativeArray 34 sptr,int,sptr,sptr,var,int #comfunc global IUIAutomation_AddPropertyChangedEventHandler 35 sptr,int,sptr,sptr,var #comfunc global IUIAutomation_RemovePropertyChangedEventHandler 36 sptr,sptr #comfunc global IUIAutomation_AddStructureChangedEventHandler 37 sptr,int,sptr,sptr #comfunc global IUIAutomation_RemoveStructureChangedEventHandler 38 sptr,sptr #comfunc global IUIAutomation_AddFocusChangedEventHandler 39 sptr,sptr #comfunc global IUIAutomation_RemoveFocusChangedEventHandler 40 sptr #comfunc global IUIAutomation_RemoveAllEventHandlers 41 #comfunc global IUIAutomation_IntNativeArrayToSafeArray 42 var,int,var #comfunc global IUIAutomation_IntSafeArrayToNativeArray 43 var,var,var #comfunc global IUIAutomation_RectToVariant 44 int,var #comfunc global IUIAutomation_VariantToRect 45 int,var #comfunc global IUIAutomation_SafeArrayToRectNativeArray 46 var,var,var #comfunc global IUIAutomation_CreateProxyFactoryEntry 47 sptr,sptr #comfunc global IUIAutomation_get_ProxyFactoryMapping 48 sptr #comfunc global IUIAutomation_GetPropertyProgrammaticName 49 int,var #comfunc global IUIAutomation_GetPatternProgrammaticName 50 int,var #comfunc global IUIAutomation_PollForPotentialSupportedPatterns 51 sptr,var,var #comfunc global IUIAutomation_PollForPotentialSupportedProperties 52 sptr,var,var #comfunc global IUIAutomation_CheckNotSupported 53 int,var #comfunc global IUIAutomation_get_ReservedNotSupportedValue 54 sptr #comfunc global IUIAutomation_get_ReservedMixedAttributeValue 55 sptr #comfunc global IUIAutomation_ElementFromIAccessible 56 sptr,int,sptr #comfunc global IUIAutomation_ElementFromIAccessibleBuildCache 57 sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAutomation "{30CBE57D-D9D0-452A-AB13-7AC5AC4825EE}" #usecom global IUIAutomation IID_IUIAutomation "{}" #comfunc global IUIAutomation_CompareElements 3 sptr,sptr,sptr #comfunc global IUIAutomation_CompareRuntimeIds 4 sptr,sptr,sptr #comfunc global IUIAutomation_GetRootElement 5 sptr #comfunc global IUIAutomation_ElementFromHandle 6 sptr,sptr #comfunc global IUIAutomation_ElementFromPoint 7 int,sptr #comfunc global IUIAutomation_GetFocusedElement 8 sptr #comfunc global IUIAutomation_GetRootElementBuildCache 9 sptr,sptr #comfunc global IUIAutomation_ElementFromHandleBuildCache 10 sptr,sptr,sptr #comfunc global IUIAutomation_ElementFromPointBuildCache 11 int,sptr,sptr #comfunc global IUIAutomation_GetFocusedElementBuildCache 12 sptr,sptr #comfunc global IUIAutomation_CreateTreeWalker 13 sptr,sptr #comfunc global IUIAutomation_get_ControlViewWalker 14 sptr #comfunc global IUIAutomation_get_ContentViewWalker 15 sptr #comfunc global IUIAutomation_get_RawViewWalker 16 sptr #comfunc global IUIAutomation_get_RawViewCondition 17 sptr #comfunc global IUIAutomation_get_ControlViewCondition 18 sptr #comfunc global IUIAutomation_get_ContentViewCondition 19 sptr #comfunc global IUIAutomation_CreateCacheRequest 20 sptr #comfunc global IUIAutomation_CreateTrueCondition 21 sptr #comfunc global IUIAutomation_CreateFalseCondition 22 sptr #comfunc global IUIAutomation_CreatePropertyCondition 23 int,int,sptr #comfunc global IUIAutomation_CreatePropertyConditionEx 24 int,int,int,sptr #comfunc global IUIAutomation_CreateAndCondition 25 sptr,sptr,sptr #comfunc global IUIAutomation_CreateAndConditionFromArray 26 sptr,sptr #comfunc global IUIAutomation_CreateAndConditionFromNativeArray 27 sptr,int,sptr #comfunc global IUIAutomation_CreateOrCondition 28 sptr,sptr,sptr #comfunc global IUIAutomation_CreateOrConditionFromArray 29 sptr,sptr #comfunc global IUIAutomation_CreateOrConditionFromNativeArray 30 sptr,int,sptr #comfunc global IUIAutomation_CreateNotCondition 31 sptr,sptr #comfunc global IUIAutomation_AddAutomationEventHandler 32 int,sptr,int,sptr,sptr #comfunc global IUIAutomation_RemoveAutomationEventHandler 33 int,sptr,sptr #comfunc global IUIAutomation_AddPropertyChangedEventHandlerNativeArray 34 sptr,int,sptr,sptr,sptr,int #comfunc global IUIAutomation_AddPropertyChangedEventHandler 35 sptr,int,sptr,sptr,sptr #comfunc global IUIAutomation_RemovePropertyChangedEventHandler 36 sptr,sptr #comfunc global IUIAutomation_AddStructureChangedEventHandler 37 sptr,int,sptr,sptr #comfunc global IUIAutomation_RemoveStructureChangedEventHandler 38 sptr,sptr #comfunc global IUIAutomation_AddFocusChangedEventHandler 39 sptr,sptr #comfunc global IUIAutomation_RemoveFocusChangedEventHandler 40 sptr #comfunc global IUIAutomation_RemoveAllEventHandlers 41 #comfunc global IUIAutomation_IntNativeArrayToSafeArray 42 sptr,int,sptr #comfunc global IUIAutomation_IntSafeArrayToNativeArray 43 sptr,sptr,sptr #comfunc global IUIAutomation_RectToVariant 44 int,sptr #comfunc global IUIAutomation_VariantToRect 45 int,sptr #comfunc global IUIAutomation_SafeArrayToRectNativeArray 46 sptr,sptr,sptr #comfunc global IUIAutomation_CreateProxyFactoryEntry 47 sptr,sptr #comfunc global IUIAutomation_get_ProxyFactoryMapping 48 sptr #comfunc global IUIAutomation_GetPropertyProgrammaticName 49 int,sptr #comfunc global IUIAutomation_GetPatternProgrammaticName 50 int,sptr #comfunc global IUIAutomation_PollForPotentialSupportedPatterns 51 sptr,sptr,sptr #comfunc global IUIAutomation_PollForPotentialSupportedProperties 52 sptr,sptr,sptr #comfunc global IUIAutomation_CheckNotSupported 53 int,sptr #comfunc global IUIAutomation_get_ReservedNotSupportedValue 54 sptr #comfunc global IUIAutomation_get_ReservedMixedAttributeValue 55 sptr #comfunc global IUIAutomation_ElementFromIAccessible 56 sptr,int,sptr #comfunc global IUIAutomation_ElementFromIAccessibleBuildCache 57 sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。