반응형

소프트웨어 접근성 62

[소프트웨어 접근성] 가상 키보드 만들기 4 -한글 오토마타 만들기 개요

[소프트웨어 접근성] 가상 키보드 만들기4-한글 오토마타 만들기 개요 가상 키보드에서는 한글을 입력할 수 있게 한글 오토마타가 필요합니다. 이번에는 한글 오토마타 라이브러리를 만들어 봅시다. 한글을 입력할 대상 컨트롤에 포커스를 유지하는 방식으로 보조기술을 만들면 키보드 이벤트로 처리할 수 있지만 한글을 입력시키기 위해 포커스를 잠시 변경하면 원하는 한글 입력을 할 수 없습니다. 예를 들어 'ㅁ', 'ㅏ' 순으로 키를 누르면 '마'로 바뀌길 원하지만 'ㅁ ㅏ'로 바뀝니다. 여기에서는 이러한 문제를 해결하기 위해 한글 오토마타를 만들어 볼게요. 완성형 한글 코드는 초성과 중성과 중성의 각 코드값을 다음의 식으로 환산합니다. 한글 코드 값 = 초성*중성개수*종성 개수+중성 *종성개수+종성+BASE 코드(0x..

[소프트웨어 접근성] 가상 키보드 만들기 3 - 마우스 이벤트 예광탄

[소프트웨어 접근성] 가상 키보드 만들기 3 - 마우스 이벤트 예광탄 이번에는 가상 키보드에 필요한 것은 아니지만 가상 마우스를 만든다고 하면 프로그램 방식으로 마우스 이벤트를 발생하는 방법을 알아야 합니다. 프로그램 방식으로 키보드 이벤트를 발생하는 부분과 비슷하므로 같이 다루기로 할게요. [그림] 마우스 이벤트 예광탄 실행화면 및 컨트롤 배치 Windows 32 API에서는 프로그램 방식으로 마우스 이벤트를 발생시키는 mouse_event 함수를 제공하고 있습니다. 다음은 프로그램 방식으로 키보드 이벤트를 발생시키는 mouse_event 함수 원형입니다. WINUSERAPI VOID WINAPI mouse_event( __in DWORD dwFlags, __in DWORD dx, __in DWORD ..

[소프트웨어 접근성] 가상 키보드 만들기 2 - 키보드 이벤트 예광탄

[소프트웨어 접근성] 가상 키보드 만들기 2 - 키보드 이벤트 예광탄 이번에는 가상 키보드를 제작할 때 필요한 키보드 이벤트를 발생하는 예광탄을 만듭시다. [그림] 실행화면 및 컨트롤 배치 윈도우즈 응용 프로그램 프로젝트를 생성한 후에 컨트롤 배치를 먼저 하세요. using System; using System.Runtime.InteropServices; namespace 키보드_이벤트_예광탄 { [Flags] public enum KeyFlag{ KE_DOWN = 0, KE__EXTENDEDKEY = 1, KE_UP = 2 } public static class WrapNative { [DllImport("User32.dll")] static extern void keybd_event(byte vk, ..

[소프트웨어 접근성] 가상 키보드 만들기 1

[소프트웨어 접근성] 가상 키보드 만들기 1 이번 장에서는 보조 기술을 만들 때 필요한 기술을 학습해 봅시다. 보조 기술은 키보드나 마우스, 모니터처럼 사용자와 상호작용하는 표준 장치를 대신하는 장치 혹은 소프트웨어를 말합니다. 보조 기술에는 소프트웨어 키보드와 돋보기, 스피치, 점자 인식기 등이 있습니다. 이와 같은 기술에서는 UI 자동화 기술을 이용하여 상태 변화나 명령을 내릴 수 있습니다. 여기에서는 UI 자동화 기술 외에도 프로그램 방식으로 키보드 이벤트나 마우스 이벤트를 발생시키는 방법 등도 다룰 것입니다. 그리고 최종적으로 [그림]처럼 간단한 가상 키보드를 만드는 실습을 할 것입니다. [그림] 가상 키보드 실행화면 가상 키보드 만들기 결과물 자신의 개발 환경에 맞게 변환하세요. 관련 게시글[소..

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 4

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 4 이제 자동화 요소의 공통 속성을 리스트 뷰 항목에 추가하는 SetAEProperty 메서드를 구현해 봅시다. 여기에서는 먼저 리스트 뷰의 현재 항목을 제거합니다. 그리고 자동화 속성 이름과 값으로 리스트 뷰 항목 개체를 만들어 리스트 뷰에 추가합시다.private void SetAEProperty(AutomationElement ae){ lv_ae_info.Items.Clear(); lv_ae_info.Items.Add(MakeLVItem("AcceleratorKey", ae.Current.AcceleratorKey)); ...중략...}private ListViewItem MakeLVItem(string key, object value..

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 3

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 3 포커스 변경 이벤트 핸들러인 WrapAutoEvent_ae_dele 메서드를 구현해 봅시다. 여기서는 감시할 프로세스를 설정하지 않은 상태라면 바로 끝냅니다. 그리고 설정되어 있는 상태라면 포커스를 점유한 자동화 요소가 설정 프로세스의 요소인지 확인하여 작업을 수행합니다. 그런데 Windows Form 응용에서 UI 컨트롤을 제어할 수 있는 것은 소유 쓰레드만 가능하므로 크로스 쓰레드 문제를 해결해야 합니다. 만약 컨트롤이나 폼의 InvokeRequiered 속성이 참이라면 현재 쓰레드는 컨트롤이나 폼을 제어할 수 없는 다른 쓰레드입니다. 이럴 때 적적한 대리자와 대리자 수행에 필요한 인자 항목을 넣어 컨트롤이나 폼의 Invoke 메서드..

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 2

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 2 새로 고침 버튼을 눌렀을 때 이벤트 핸들러를 작성합시다.private void btn_refresh_Click(object sender, EventArgs e){프로세스 목록을 보여 줄 리스트 박스의 항목을 지우세요. lbox_process.Items.Clear(); 프로세스 목록을 얻어옵니다. Process[] processes = Process.GetProcesses();얻어온 프로세스 목록의 각 프로세스를 추가하세요. foreach (Process process in processes) { AddProcess(process); }} WrapProcess는 앞에서 만들었던 것을 이용할게요.[소프트웨어 접근성] UI 자동화 요소 탐색기..

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 1

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 1 [그림] 포커스 소유 UI 요소 정보 수집기 실행화면 이번에는 하나의 프로세스에서 포커스 변경 시 포커스를 소유한 UI 요소의 자동화 정보를 수집하여 보여주는 응용을 제작해 봅시다. [그림]처럼 새로 고침 버튼을 누르면 메인 창이 있는 프로세스 목록이 리스트에 보이고 리스트에서 특정 항목을 더블 클릭하면 해당 프로세스의 UI 요소 정보를 수집하여 나타내는 응용입니다. 해당 프로세스의 UI 요소의 정보 이름은 레이블에 표시하고 공통적인 UI 자동화 요소 속성은 리스트 뷰에 UI 자동화 패턴은 리스트 박스에 추가합시다. 여기서는 Visual C#의 Windows Form 응용 프로그램 템플릿으로 작성할게요. 먼저 폼의 컨트롤을 배치하세요. ..

[소프트웨어 접근성] 클라이언트 용 UI 자동화 이벤트

클라이언트용 UI 자동화 이벤트 이 책에서는 UI 자동화 클라이언트 응용과 보조 기술에서 UI 자동화 기술을 사용하는 방법을 중점으로 소개하고 있습니다. 이제 클라이언트용 UI 자동화 이벤트를 살펴봅시다. 클라이언트용 UI 자동화 이벤트에서는 Automation 클래스의 정적 메소드를 사용하여 원하는 UI 자동화 이벤트를 구독 및 제거할 수 있습니다. public static void AddAutomationFocusChangedEventHandler( AutomationFocusChangedEventHandler eventHandler) 초점 변경 이벤트 핸들러를 등록합니다. public static void AddAutomationPropertyChangedEventHandler( Automation..

[소프트웨어 접근성] UI 자동화 이벤트와 이벤트 인자 형식

UI 자동화 이벤트와 이벤트 인자 형식 UI 자동화 이벤트는 보조 기술이나 UI 자동화 클라이언트 응용을 위한 핵심 기술입니다. 보조 기술이나 접근성 평가 도구와 같은 UI 자동화 클라이언트에서는 자동화 요소의 변화를 감지하여 필요한 정보를 최종 사용자에게 알려주기 위하여 UI 자동화 이벤트를 사용합니다. UI 자동화 이벤트는 크게 속성 변경, 요소 동작, 구조 변경, 전역 데스크톱 변경으로 분류합니다. 속성 변경 이벤트는 레이블의 캡션명이 바뀌거나 체크 박스의 체크 상태가 바뀌는 등의 자동화 요소의 속성이 변경할 때 발생하는 UI 자동화 이벤트입니다. 요소 동작 이벤트는 버튼을 클릭하는 것처럼 사용자의 명령으로 UI를 변경할 때 발생합니다. 구조 변경 이벤트는 UI 자동화 트리의 구조에 변경이 생길 때..

반응형