20) WindowPattern, 21) 실습: 윈도우 옵저버

20) WindowPattern

윈도우 패턴은 창 기능을 하는 컨트롤에서 지원하는 패턴입니다.

 

System.Object
System.Windows.Automation.BasePattern
System.Windows.Automation.WindowPattern

네임스페이스:  System.Windows.Automation
어셈블리:  UIAutomationClient(UIAutomationClient.dll)

 

WindowPattern의 Current 및 Cached 속성으로 WindowPatternInformation 구조체를 접근할 수 있습니다. 그리고 WindowPatternInformation 구조체에는 최대화, 최소화 가능 여부 및 모달 대화상자인지 TopMost 창인지 등을 가져오기 할 수 있는 속성을 제공합니다.

 

속성명 설명
CanMaximize 최대화 가능 여부
CanMinimize 최소화 가능 여부
IsModal 모달 대화상자인지 여부
IsTopMost Top Most 창인지 여부
WindowInteractionState WindowInteraction 상태
WindowVisualState WindowVisual 상태

[표 5.27] WindowPatternInformation 구조체의 속성

 

 

그리고 WindowPattern 클래스에서는 창의 VisualState를 설정하고 창의 프로세스가 IDLE 상태로 전이(프로세스 종료)할 때까지 대기하는 메서드를 제공합니다.

 

또한 WindowPattern 클래스에서는 식별에 사용하는 정적 멤버 필드를 제공하고 있습니다.

 

멤버명 설명
CanMamimizeProperty CanMamimize 속성 식별
CanMinimizeProperty CanMinimize 속성 식별
IsModalProperty IsModal 속성 식별
IsTopmostProperty IsTopmost 속성 식별
Pattern WindowPattern 식별
WindowClosedEvent 창이 닫힐 때 이벤트
WindowInteractionStateProperty WindowInteractionState 속성 식별
WindowOpendEvent 창이 열릴 때 이벤트
WindowVisualStateProperty WindowVisualState 속성 식별

[표 5.28] WindowPattern 클래스의 정적 멤버 필드

 

21) 실습: 윈도우 옵저버

이번에는 컴퓨터 시스템에 윈도우가 열고 닫는 것을 관찰하는 윈도우 옵저버를 만들어 봅시다.

[그림 5.10] 실행화면
[그림 5.10] 실행화면

Form1에는 ListBox 컨트롤(Name: lbox_event)을 추가하였고 Dock속성을 Fill로 주었습니다.

윈도우 닫힘 자동화 이벤트에서는 닫힌 윈도우의 자동화 요소를 전달하지 않습니다. 이를 처리하기 위해 자동화 요소를 래핑한 클래스를 만들어서 내부에서 이를 처리할게요.

public class EAE

{

윈도우 닫힘 이벤트를 멤버로 추가합니다.

자동화 요소 이름 가져오기 속성을 제공합시다.

생성자에서는 자동화 요소 개체를 입력 인자로 받습니다.

창 닫힘 이벤트 핸들러를 작성합시다.

 

Form1의 Laod 이벤트 핸드러를 등록하세요.

OnWindowOpen 이벤트 핸들러를 구현합시다.

 

OnWindowClose 이벤트 핸드러를 등록합시다.

리스트 상자에 메시지를 추가하는 부분에서 크로스 스레드 문제가 발생합니다. 리스트 상자를 생성한 스레드와 윈도우 창이 닫힘을 전달하는 스레드가 달라서 발생하는 문제입니다. 이를 해결하기 위해 AddMsg와 시놉시스가 같은 대리자를 정의합니다.

AddMsg 메서드를 정의합시다.

 

[소스 5.7] Form1.cs