반응형

프로그래밍 기술/소프트웨어 접근성, UI 자동화 67

[소프트웨어 접근성] 가상 키보드 만들기 6 -한글 라이브러리 만들기

[소프트웨어 접근성] 가상 키보드 만들기 6 -한글 라이브러리 만들기 이제 한글 문자 생성기에서 익힌 기술을 이용하여 한글 라이브러리를 만들어 봅시다. 한글 라이브러리에는 외부에서 접근해서 사용하는 Hangul 클래스와 실제 한글을 만드는 정적 클래스 KoreanCharMaker 클래스, 현재 입력하고 있는 상태(초성, 중성, 종성이 올 차례)를 나타내는 HangulState 클래스와 와 열거형 HGState로 구성합시다. 한글 클래스는 한글 키나 다른 키를 입력받는 메서드와 리셋하는 메서드를 제공합니다. 먼저 클래스 라이브러리 프로젝트 템플릿으로 EHHangulLibrary 프로젝트틀 생성하세요. 솔루션 이름은 한글 오토마타로 정할게요. [그림] 한글 라이브러리의 클래스 구성 먼저 앞에서 만들었던 한글..

[소프트웨어 접근성] 가상 키보드 만들기 5 -한글 문자 생성기

[소프트웨어 접근성] 가상 키보드 만들기 5 -한글 문자 생성기 먼저 한글 문자 생성기를 정적 클래스 KoreanCharMaker로 정의합시다. public static class KoreanCharMaker { 먼저 한글 문자가 시작하는 BASE CODE(0xAC00), 초성 시작점(0x1100), 중성 시작점(0x1161)을 상수로 선언합니다. const int BASE_CODE = 0xAC00; const int BASE_INIT = 0x1100; const int BASE_VOWEL = 0x1161; 한글과 관련있는 자판 문자를 초성, 중성, 종성과 쉬프트 키를 정적 문자열로 선언합니다. //한글 코드 값 = 초성*중성개수*종성 개수+중성 *종성개수+종성+BASE 코드(0xAC00) const i..

[소프트웨어 접근성] 가상 키보드 만들기 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 응용 프로그램 템플릿으로 작성할게요. 먼저 폼의 컨트롤을 배치하세요. ..

반응형