WinEvents とは
サーバー アプリケーションとオペレーティング システムでは、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 に対するサーバーの呼び出しは "no operation" に相当し、パフォーマンスへの影響はごくわずかです。
サーバーは NotifyWinEvent を呼び出して、イベントが発生した後にシステムにイベントを通知します。 イベントが発生する前に、イベントをシステムに通知してはなりません。
イベントの通知を受け取るために、クライアントは SetWinEventHook を使用してコールバック フック関数を登録します。 クライアントは、考えられるすべてのイベントに対して 1 つのフック関数を設定するか、個別のイベント範囲に対して複数のフック関数を設定します。 詳細については、「 フック関数の登録」を参照してください。
Microsoft Active Accessibility は、イベントの通知を受け取ると、そのイベントに登録されたすべてのフック関数を呼び出し、 NotifyWinEvent からパラメーターを渡します。