WinEvents 및 활성 접근성

Microsoft Active Accessibility 서버는 액세스 가능한 개체가 변경되면 클라이언트에 알리기 위해 WinEvents 를 발생합니다. 서버가 클라이언트에 변경 내용에 대해 알리기 위한 다양한 조건이 있습니다. Microsoft Active Accessibility에서 정의한 각 이벤트 상수 는 클라이언트에 알림을 받는 조건에 대해 설명합니다. 예를 들어 WinEvents는 다음과 같은 신호를 보낼 수 있습니다.

  • 개체가 만들어지거나 제거되는 경우
  • 개체가 포커스를 받거나 잃을 때
  • 개체의 상태 또는 위치가 변경되는 경우
  • 개체의 속성이 변경되는 경우

클라이언트 애플리케이션은 이벤트 알림을 자동으로 받지 않습니다. SetWinEventHook 함수를 호출하여 수신할 이벤트를 지정해야 합니다. SetWinEventHook를 사용하면 클라이언트가 하나 이상의 이벤트를 수신하도록 등록하고 지정된 이벤트를 처리하도록 후크 함수를 설정합니다. 클라이언트는 동일한 후크 함수를 사용하여 여러 유형의 이벤트를 처리하거나 다중 후크 함수를 사용할 수 있습니다. 클라이언트는 등록해야 하는 각 후크 함수에 대해 SetWinEventHook 를 한 번 호출합니다.

후크 함수는 클라이언트의 코드 본문 내, 클라이언트 프로세스에 매핑된 DLL 또는 서버 프로세스에 매핑된 DLL에 있습니다. 이러한 각 방법에는 장점과 단점이 있습니다. 자세한 내용은 컨텍스트 내 및 컨텍스트 외부 후크 함수를 참조하세요.

클라이언트에 이벤트 발생을 알리기 위해 서버는 NotifyWinEvent를 호출합니다. 시스템은 클라이언트 애플리케이션이 이벤트에 대한 후크 함수를 설정했는지 여부를 확인하고 필요에 따라 적절한 후크 함수를 호출합니다.

클라이언트의 후크 함수가 호출되면 이벤트를 설명하는 여러 매개 변수와 이벤트를 생성한 개체를 수신합니다. 이벤트를 생성한 개체에 액세스하기 위해 클라이언트 후크 함수는 AccessibleObjectFromEvent를 호출합니다.

참고

WinEvents를 수신하도록 등록된 클라이언트가 없는 경우 NotifyWinEvent 를 호출하는 서버에 미치는 성능 영향은 무시할 수 있습니다.

서버는 액세스 가능한 자체 개체의 변경 내용에 대해서만 NotifyWinEvent 를 호출합니다. 시스템 제공 사용자 인터페이스 요소의 변경 내용은 NotifyWinEvent 를 호출하지 않습니다.

Event-Driven 통신

클라이언트는 WinEvent 알림을 받기 전에 WinEvent 후크를 등록해야 합니다. 불필요한 콜백을 방지하고 성능을 향상시키려면 클라이언트는 수신해야 하는 이벤트에 대해서만 등록하는 것이 좋습니다.

후크 프로시저 내에서 클라이언트는 AccessibleObjectFromEvent 를 호출하여 이벤트가 적용되는 요소에 대한 IAccessible 개체를 검색할 수 있습니다. 이 개체를 사용하면 클라이언트가 IAccessible 메서드를 호출하여 정보를 검색하거나 UI 요소와 상호 작용할 수 있습니다.

WinEvents