WinEvents 和活动辅助功能概述 - Win32 apps

Microsoft 的活动辅助功能服务器触发 WinEvents ,在辅助对象发生变化时通知客户端。 服务器在很多情况下通知客户端发生更改。 Microsoft Active Accessibility 定义的每个 事件常量 描述客户端收到通知的条件。 例如,WinEvents 可以发出以下信号:

创建或销毁对象时。

当对象接收或失去焦点时。

对象的状态或位置发生更改时。

对象的任何属性发生更改时。

客户端应用程序不会自动接收事件通知;它们必须通过调用 SetWinEventHook 函数来指定要接收的事件。 使用 SetWinEventHook,客户端注册以接收一个或多个事件,并设置挂钩函数来处理指定的事件。 客户端可以使用同一挂钩函数来处理多种类型的事件,也可以使用多个挂钩函数。 客户端对于每个需要注册的挂钩函数,都调用一次 SetWinEventHook。

挂钩函数位于客户端的代码正文中,在映射到客户端进程的 DLL 中,或在映射到服务器进程的 DLL 中。 其中每个方法都有优点和缺点。 有关详细信息,请参阅上下文内和上下文外挂钩函数。

若要通知客户端发生事件,服务器调用 NotifyWinEvent。 系统将检查任何客户端应用程序是否为事件设置了挂钩函数,并在必要时调用相应的挂钩函数。

调用客户端的挂钩函数时,它会收到描述事件和生成事件的对象的多个参数。 若要访问生成事件的对象,客户端挂钩函数将调用 AccessibleObjectFromEvent。

注释

如果尚未注册任何客户端来接收 WinEvents,则调用 NotifyWinEvent 的服务器的性能影响微不足道。

服务器仅在其自己的可访问对象中调用 NotifyWinEvent 进行更改;它们不调用 NotifyWinEvent 来更改系统提供的用户界面元素。

事件驱动的通信

客户端必须先注册 WinEvent 挂钩,然后才能接收 WinEvent 通知。 为了避免不必要的回调并提高性能,建议客户端仅注册他们需要接收的事件。

在挂钩过程中,客户端可以调用 AccessibleObjectFromEvent 来检索事件应用到的元素的 IAccessible 对象。 使用此对象,客户端可以开始调用 IAccessible 方法以检索信息或与 UI 元素交互。

相关主题

WinEvents