UI 자동화 이벤트는 보조 기술이나 UI 자동화 클라이언트 응용을 위한 핵심 기술입니다. 보조 기술이나 접근성 평가 도구와 같은 UI 자동화 클라이언트에서는 자동화 요소의 변화를 감지하여 필요한 정보를 최종 사용자에게 알려주기 위하여 UI 자동화 이벤트를 사용합니다.
가. UI 자동화 이벤트 형식
UI 자동화 이벤트는 크게 속성 변경, 요소 동작, 구조 변경, 전역 데스크톱 변경으로 분류합니다.
속성 변경 이벤트는 레이블의 캡션명이 바뀌거나 체크 박스의 체크 상태가 바뀌는 등의 자동화 요소의 속성이 변경할 때 발생하는 UI 자동화 이벤트입니다. 요소 동작 이벤트는 버튼을 클릭하는 것처럼 사용자의 명령으로 UI를 변경할 때 발생합니다. 구조 변경 이벤트는 UI 자동화 트리의 구조에 변경이 생길 때 발생합니다. 전역 데스크톱 이벤트는 초점이 바뀌거나 창이 열리고 닫히는 등의 전역적인 작업을 수행할 때 발생하는 UI 자동화 이벤트입니다.
그리고 UI 자동화 이벤트는 AutomationEvent 개체로 식별합니다. 다음은 UI 자동화 클라이언트 응용에서 자동화 이벤트를 식별하는 자동화 요소의 멤버 필드입니다. 대부분의 UI 자동화 기술에 관한 내용은 Microsoft 사에서 제공하는 MSDN을 발췌하였습니다.
public static readonly AutomationEvent AsyncContentLoadedEvent
비동기 콘텐츠 로드 도중 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent ElementAddedToSelectionEvent
선택한 항목의 컬렉션에 항목을 추가할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent ElementRemovedFromSelectionEvent
선택한 항목의 컬렉션에 항목을 제거할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent ElementSelectedEvent
Select, AddToSelection, RemoveFromSelection 호출하였을 때 항목이 하나만 선택 상태일 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent InvalidatedEvent
컨테이너의 선택 영역 변경으로 InvalidateLimit 상수보다 많은 수의 추가나 제거 이벤트를 전송할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent InvokedEvent
컨트롤을 호출하거나 활성화할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent LayoutInvalidatedEvent
레이아웃을 무효화할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent MenuClosedEvent
메뉴를 닫을 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent MenuOpenedEvent
메뉴를 열 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent TextChangedEvent
텍스트를 변경할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent TextSelectionChangedEvent
텍스트의 선택 영역을 변경할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent ToolTipClosedEvent
도구 설명을 닫을 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent ToolTipOpenedEvent
도구 설명을 열 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent WindowOpenedEvent
창을 열 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent AutomationFocusChangedEvent
초점을 변경할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent AutomationPropertyChangedEvent
속성을 변경할 때 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent StructureChangedEvent
UI 자동화 트리 구조가 바뀌면 발생하는 이벤트를 식별합니다.
public static readonly AutomationEvent WindowClosedEvent
창이 닫힐 때 발생하는 이벤트를 식별합니다.
그리고 자동화 이벤트 핸들러에는 자동화 클라이언트 응용에서 필요한 인자를 전달합니다.
System.Object
System.EventArgs
System.Windows.Automation.AutomationEventArgs
System.Windows.Automation.AsyncContentLoadedEventArgs
System.Windows.Automation.AutomationFocusChangedEventArgs
System.Windows.Automation.AutomationPropertyChangedEventArgs
System.Windows.Automation.StructureChangedEventArgs
System.Windows.Automation.WindowClosedEventArgs
자동화 이벤트 인자 클래스의 기반 클래스입니다. 멤버 속성으로 이벤트 식별자를 제공합니다.
public class AutomationEventArgs : EventArgs { public AutomationEventArgs(AutomationEvent eventId) public AutomationEvent EventId { get; } //식별자 }
AsyncContentLoadedEvent 핸들러에 전달하는 이벤트 인자 클래스입니다. 멤버 속성으로 콘텐츠의 로드 상태와 로드한 백분율 및 이벤트 식별자를 제공합니다.
public sealed class AsyncContentLoadedEventArgs : AutomationEventArgs { public AsyncContentLoadedEventArgs(AsyncContentLoadedState asyncContentState, double percentComplete); //상태, 백분율 public AsyncContentLoadedState AsyncContentLoadedState { get; } //상태 public AutomationEvent EventId { get; } //이벤트 식별자 public double PercentComplete { get; } //로드한 컨텐츠의 백분율 )
초점 변경 이벤트 핸들러의 이벤트 인자 클래스입니다. 멤버 속성으로 자동화 요소 기술의 이전에 사용했던 Microsoft Active Accessibility의 ID를 가져올 수 있습니다.
public class AutomationFocusChangedEventArgs : AutomationEventArgs { public AutomationFocusChangedEventArgs(int idObject, int idChild) //개체의 ID, 자식 ID public int ChildId { get; } //자식 ID public AutomationEvent EventId { get; } //이벤트 식별자 public int ObjectId { get; } //개체 ID }
속성 변경 이벤트 핸들러의 이벤트 인자 클래스입니다. 멤버 속성으로 변경 전, 후의 값과 속성을 식별하기 위한 멤버를 제공합니다.
public sealed class AutomationPropertyChangedEventArgs : AutomationEventArgs { public AutomationPropertyChangedEventArgs(AutomationProperty property,Object oldValue, Object newValue) public AutomationEvent EventId { get; } //이벤트 식별자 public Object NewValue { get; } //이후 값 public Object OldValue { get; } //이전 값 public AutomationProperty Property { get; } //속성 식별자 }
속성 변경 이벤트 핸들러의 이벤트 인자 클래스입니다. 멤버 속성으로 구조 변경 타입을 제공합니다.
public sealed class StructureChangedEventArgs : AutomationEventArgs { public StructureChangedEventArgs(StructureChangeType structureChangeType, int[] runtimeId) public AutomationEvent EventId { get; }// 이벤트 식별자 public StructureChangeType StructureChangeType { get; } //구조 변경 타입 }
속성 변경 이벤트 핸들러의 이벤트 인자 클래스입니다. 멤버 속성으로 구조 변경 타입을 제공합니다.
public sealed class WindowClosedEventArgs : AutomationEventArgs { public WindowClosedEventArgs(int[] runtimeId) public AutomationEvent EventId { get; } //이벤트 식별자 }