Skip to menu

A11Y

# Windows IUIAutomation 기술 소개

## 1. IUIAutomation이란?
IUIAutomation은 Windows UIAutomation API의 COM 기반 인터페이스로, 애플리케이션의 사용자 인터페이스(UI)를 프로그래밍 방식으로 제어하고 자동화하는 데 사용됩니다. 주로 접근성 도구 개발과 UI 테스트 자동화에 활용되며, 다양한 유형의 Windows 애플리케이션과 상호작용할 수 있도록 설계되었습니다.

## 2. 주요 사용 사례
- **접근성 도구 개발**: 스크린 리더, 화면 확대기 등의 접근성 도구에서 UI 요소를 파악하고 상호작용할 수 있습니다.
- **UI 자동화**: 애플리케이션의 UI를 자동으로 테스트하거나 반복적인 작업을 자동화할 수 있습니다.
- **자동화된 상호작용**: 여러 애플리케이션 간의 상호작용을 자동화하거나, 반복적인 작업을 간소화할 때 사용됩니다.

## 3. IUIAutomation의 구조

### (1) **IUIAutomationElement**
- UI의 개별 요소를 나타내는 기본 인터페이스입니다.
- 각 UI 요소는 고유한 속성과 메서드를 가지고 있어 탐색 및 상호작용이 가능합니다.
- 주요 속성: `Name`, `AutomationId`, `ControlType` 등.

### (2) **IUIAutomationPattern**
- UI 요소가 제공하는 특정 기능을 정의하는 패턴입니다. 예를 들어, 버튼의 클릭 동작, 텍스트 상자의 입력 동작을 제어할 수 있습니다.
  - **InvokePattern**: 버튼 클릭 동작을 지원.
  - **ValuePattern**: 텍스트 상자에서 값을 읽고 쓰는 동작을 지원.
  - **ScrollPattern**: 스크롤 가능한 요소를 제어.

### (3) **IUIAutomationCondition**
- 특정 조건에 맞는 UI 요소를 찾기 위한 조건을 정의합니다.
  - **PropertyCondition**: 특정 속성 값에 맞는 UI 요소를 찾는 조건.
  - **AndCondition, OrCondition**: 여러 조건을 결합하여 복잡한 UI 요소를 찾기 위한 조건.

### (4) **IUIAutomationEventHandler**
- UI 요소에서 발생하는 이벤트를 감지하고 처리하는 인터페이스입니다. 예를 들어, 버튼이 클릭되거나 텍스트가 변경되는 등의 이벤트를 처리할 수 있습니다.

## 4. IUIAutomation의 주요 기능

### (1) **UI 요소 탐색**
IUIAutomation은 UI 요소를 계층적으로 탐색할 수 있는 기능을 제공합니다. 각 애플리케이션의 UI는 트리 구조로 되어 있으며, 루트는 데스크톱(Windows Desktop)입니다. 이를 통해 사용자는 특정 애플리케이션 창이나 컨트롤을 찾아내어 상호작용할 수 있습니다.

### (2) **패턴을 통한 상호작용**
IUIAutomation은 다양한 패턴을 통해 UI 요소와 상호작용할 수 있습니다. 패턴은 UI 요소의 기능을 나타내며, 다음과 같은 패턴들이 많이 사용됩니다:
- **InvokePattern**: 버튼 클릭 등 간단한 동작을 수행.
- **ValuePattern**: 텍스트 상자나 숫자 입력 필드의 값을 읽고 쓰는 데 사용.
- **SelectionPattern**: 리스트나 콤보박스와 같은 선택형 컨트롤의 선택 항목을 제어.

### (3) **UI 요소 검색**
IUIAutomation은 다양한 방법으로 UI 요소를 검색할 수 있습니다. 속성 기반 검색을 통해 특정 컨트롤을 찾고 상호작용할 수 있습니다.
```cpp
CComPtr<IUIAutomationElement> pElement;
pAutomation->ElementFromHandle(hWnd, &pElement);
```
위의 코드 예시는 `hWnd` 핸들을 이용해 해당 핸들의 UI 요소를 검색하는 코드입니다.

### (4) **이벤트 핸들링**
IUIAutomation은 UI 요소의 이벤트를 모니터링하고 응답할 수 있는 기능을 제공합니다. 예를 들어, 특정 버튼이 클릭되었을 때 이벤트를 감지할 수 있습니다.
```cpp
pAutomation->AddAutomationEventHandler(UIA_Invoke_InvokedEventId, 
                                       pElement, 
                                       TreeScope_Element, 
                                       NULL, 
                                       pEventHandler);
```
이 코드는 버튼의 클릭 이벤트를 감지하고 처리하는 예제입니다.

## 5. IUIAutomation의 주요 인터페이스 및 메서드

### (1) **IUIAutomation**
- UIAutomation의 핵심 인터페이스로, UI 요소를 검색하고 상호작용하는 기능을 제공합니다.
- 주요 메서드:
  - `ElementFromHandle`: 주어진 윈도우 핸들(`HWND`)로 UI 요소를 검색합니다.
  - `FindAll`: 주어진 조건에 맞는 모든 UI 요소를 찾습니다.

### (2) **IUIAutomationElement**
- UI 요소를 나타내는 인터페이스로, UI 요소의 속성 및 패턴에 접근할 수 있습니다.
- 주요 메서드:
  - `GetCurrentPropertyValue`: 현재 UI 요소의 속성 값을 가져옵니다.
  - `GetCurrentPattern`: UI 요소의 패턴에 접근하여 상호작용할 수 있습니다.

### (3) **IUIAutomationCondition**
- UI 요소를 검색할 때 사용되는 조건을 정의합니다.
  - `PropertyCondition`: 특정 속성 값을 기준으로 요소를 검색.
  - `AndCondition`, `OrCondition`: 여러 조건을 결합하여 복잡한 검색을 수행.

## 6. IUIAutomation 예제 코드

### (1) 윈도우 핸들을 이용한 UI 요소 검색 및 버튼 클릭
```cpp
CComPtr<IUIAutomation> pAutomation;
CComPtr<IUIAutomationElement> pElement;
pAutomation->ElementFromHandle(hWnd, &pElement);

CComPtr<IUIAutomationInvokePattern> pInvokePattern;
pElement->GetCurrentPattern(UIA_InvokePatternId, (IUnknown**)&pInvokePattern);

if (pInvokePattern != nullptr)
{
    pInvokePattern->Invoke();
}
```
이 코드는 특정 핸들(`hWnd`)을 사용해 해당 윈도우의 UI 요소를 검색한 후, 해당 UI 요소가 버튼일 경우 이를 클릭하는 예제입니다.

## 7. IUIAutomation의 장점 및 한계

### 장점
- **접근성 강화**: IUIAutomation은 접근성 도구를 개발하는 데 필수적이며, 장애를 가진 사용자들이 애플리케이션을 보다 쉽게 사용할 수 있게 해줍니다.
- **자동화 효율성**: 반복적인 UI 테스트 및 작업 자동화를 통해 개발자와 테스터의 생산성을 높여줍니다.
- **다양한 애플리케이션 지원**: Windows에서 실행되는 거의 모든 애플리케이션과 상호작용할 수 있습니다.

### 한계
- **복잡한 UI 구조 처리**: UI가 복잡할 경우, UI 요소를 찾고 상호작용하는 것이 어려울 수 있습니다.
- **성능**: 큰 애플리케이션에서는 UI 요소 검색 및 상호작용에 성능 문제가 발생할 수 있습니다.

---

## 8. 결론
IUIAutomation은 Windows 환경에서 접근성 도구 및 UI 자동화 도구를 개발하는 데 중요한 역할을 합니다. 이를 통해 장애가 있는 사용자에게 보다 나은 사용자 경험을 제공할 수 있으며, UI 테스트 및 자동화를 통해 애플리케이션의 품질과 효율성을 높일 수 있습니다.

No. Subject Date Views
42 센스리더 어센드 KEY 파일 인증 안내 2026.04.27 99
41 OpenSCAD#12. 시각장애인도 3D 디자인을 - 2D 평면을 3D 입체로 만드는 마법 - 사출(extrusion)의 이해 2026.04.07 244
40 [참고] OpenSCAD Nightly 에서 사용되는 명령어 일람 - A.I 작성 2026.04.07 248
39 OpenSCAD#11. 시각장애인도 3D 디자인을 - 부품 단위로 생각하기, module 2026.04.03 275
38 [자료] OpenSCAD로 만든 남성과 여성 피규어 모델 file 2026.04.03 277
37 OpenSCAD#10. 시각장애인도 3D 디자인을 - 반복의 마법, for 2026.04.01 291
36 OpenSCAD#9. 시각장애인도 3D 디자인을 - 모서리가 둥근 큐브 만들기 2026.03.31 302
35 OpenSCAD#6. 시각장애인도 3D 디자인을 - 맥미니에 구멍 뚫기 2026.03.24 396
34 OpenSCAD#7. 시각장애인도 3D 디자인을 - 곡면의 이해 - 품질과 성능 2026.03.26 421
33 센스리더 어센드 멀티라인 점자 출력 기능 2026.02.20 436
32 OpenSCAD#1. 시각장애인도 3D 디자인을 - 소개편 2026.03.17 468
31 OpenSCAD#2. 시각장애인도 3D 디자인을 - 설치와 실행 2026.03.18 504
30 센스리더 즐겨찾기 도구의 A.I. 프롬프트 사용 안내 2026.02.03 520
29 OpenSCAD#5. 시각장애인도 3D 디자인을 - 맥미니(Mac mini) 만들기 2026.03.23 582
28 센스리더 도구에 대한 간략한 소개 2026.01.27 609
27 [수정] OpenSCAD#3. 시각장애인도 3D 디자인을 - 공간의 이해 - 좌표, 단위, 회전 2026.03.19 653
26 센스리더 가상커서 해제시 포커스 정보에 관하여 2026.02.09 673
25 OpenSCAD#8. 시각장애인도 3D 디자인을 - scale, 빵 만들기 2026.03.27 683
24 OpenSCAD#4. 시각장애인도 3D 디자인을 - 미키마우스 머리 만들기 2026.03.20 827
23 윈도우 접근성 기술: MSAA와 UIAutomation 비교 2024.09.09 863