サーバー アプリケーションとオペレーティング システムは、WinEvents を使用して、システムまたはユーザー インターフェイスで変更が発生したときにクライアントに通知します。
WinEvent のサポートは、次の機能を提供する Windows オペレーティング システムの機能です。
- クライアントがイベント通知に登録するための簡単な方法。
- クライアント コードをサーバーに挿入するためのメカニズム。
- サーバーから関心のあるクライアントへのイベントのルーティング。
- ほとんどのHWNDベースコントロールの自動イベント生成。
HWNDベースのコントロールのイベント生成は、サーバー開発者にとって特に重要です。 Microsoft Active Accessibility ランタイムは、すべての標準 UI 要素 IAccessible プロキシを提供します。 同様に、システムは、HWNDベースのコントロールに対して他のアクションを作成、破棄、移動、サイズ変更、または実行するたびに、適切な WinEvent を自動的に生成します。
一般的な HWND イベントを含む一部の WinEvent は、システムによって自動的にサポートされます。 状態の変更や特定のコントロールに固有の選択イベントなど、その他の種類の WinEvent は、Microsoft Active Accessibility サーバーでサポートされています。
UI に影響するイベントが発生した場合、サーバーは、NotifyWinEvent 関数を呼び出すことによって、関心のあるすべてのクライアントにイベント通知をブロードキャストできます。 関数呼び出しには、発生したイベントの種類を識別する情報と、イベントが適用される UI 要素が含まれます。 クライアントはこの情報を使用して、UI 要素の IAccessible オブジェクトを取得し、詳細情報を収集できます。
たとえば、コントロールの名前が変更されたことをクライアントに通知するために、サーバーは NotifyWinEvent呼び出し、イベント パラメーターに EVENT_OBJECT_NAMECHANGE を渡します。 システムは、その特定のイベントを受信するために登録されているクライアントを決定し、登録されたコールバック関数を呼び出すことによって応答します。 クライアントがイベントに登録されていない場合、NotifyWinEvent へのサーバーの呼び出しは "操作なし" に相当し、パフォーマンスへの影響はごくわずかです。
サーバー NotifyWinEvent を呼び出して、イベントが発生した後にシステムにイベントを通知します。 イベントが発生する前に、システムにイベントを通知してはなりません。
イベントの通知を受け取るために、クライアントは SetWinEventHookを使用してコールバック フック関数登録します。 クライアントは、可能なすべてのイベントに対して 1 つのフック関数を設定するか、個別のイベント範囲に対して複数のフック関数を設定します。 詳細については、「フック関数の登録」を参照してください。
Microsoft Active Accessibility は、イベントの通知を受け取ると、そのイベントに登録されたすべてのフック関数を呼び出し、notifyWinEventからパラメーター渡します。