WinEvents とアクティブ なアクセシビリティ
Microsoft Active Accessibility サーバーは WinEvents を発生させ、アクセス可能なオブジェクトが変更されたときにクライアントに通知します。 サーバーがクライアントに変更を通知する条件は多数あります。 Microsoft Active Accessibility によって定義された各 イベント定数 は、クライアントに通知される条件を表します。 たとえば、WinEvents は次のシグナルを通知できます。
- オブジェクトが作成または破棄されたとき。
- オブジェクトがフォーカスを受け取ったり失ったりしたとき。
- オブジェクトの状態または場所が変更されたとき。
- オブジェクトのプロパティが変更されたとき。
クライアント アプリケーションはイベント通知を自動的に受信しません。 SetWinEventHook 関数を呼び出して、受信するイベントを指定する必要があります。 SetWinEventHook を使用すると、クライアントは 1 つ以上のイベントを受信するように登録し、指定されたイベントを処理するフック関数を設定します。 クライアントは、同じフック関数を使用して複数の種類のイベントを処理することも、マルチペ フック関数を使用することもできます。 クライアントは、登録する必要があるフック関数ごとに SetWinEventHook を 1 回呼び出します。
フック関数は、クライアントのコード本文内、クライアントのプロセスにマップされた DLL 内、またはサーバーのプロセスにマップされた DLL 内にあります。 これらの各方法には、長所と短所があります。 詳細については、「 コンテキスト内およびコンテキスト外のフック関数」を参照してください。
イベントの発生をクライアントに通知するために、サーバーは NotifyWinEvent を呼び出します。 システムは、クライアント アプリケーションがイベントのフック関数を設定しているかどうかを確認し、必要に応じて適切なフック関数を呼び出します。
クライアントのフック関数が呼び出されると、イベントとイベントを生成したオブジェクトを記述する多数のパラメーターを受け取ります。 イベントを生成したオブジェクトにアクセスするために、クライアント フック関数は AccessibleObjectFromEvent を呼び出します。
Note
WinEvents を受信するクライアントが登録されていない場合、 NotifyWinEvent を呼び出すサーバーのパフォーマンスへの影響はごくわずかです。
サーバーは、独自のアクセス可能なオブジェクト内の変更に対してのみ NotifyWinEvent を呼び出します。システム提供のユーザー インターフェイス要素の変更に対して NotifyWinEvent は呼び出されません。
Event-Driven通信
クライアントは、WinEvent 通知を受信する前に WinEvent フックを登録する必要があります。 不要なコールバックを回避し、パフォーマンスを向上させるために、クライアントは受信する必要があるイベントにのみ登録することをお勧めします。
フック プロシージャ内で、クライアントは AccessibleObjectFromEvent を呼び出して、イベントが適用される要素の IAccessible オブジェクトを取得できます。 このオブジェクトを使用すると、クライアントは IAccessible メソッドの呼び出しを開始して情報を取得したり、UI 要素と対話したりできるようになります。