반응형

Windows Forms 응용 프로그램 실습 12

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

[소프트웨어 접근성] 가상 키보드 만들기 8 - 가상 키보드 만들기 윈도우즈 폼 응용 프로젝트를 추가한 후에 키보드 이벤트와 마우스 이벤트 처리를 위한 WrapNative 클래스를 추가하세요. 이 부분은 앞에서 설명한 부분이라 별도의 설명은 생략할게요. 아래의 소스 코드를 참고하세요.

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

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

[소프트웨어 접근성] 가상 키보드 만들기 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 자동화 이벤트를 이용하여 자식 요소를 추가하거나 제거할 때의 이벤트를 구독하는 구조 변경 감시자 응용 프로그램을 만들어 봅시다. *Visual Studio 2010으로 만든 솔루션을 압축한 파일입니다. 자신의 개발 환경에 맞게 변환하세요.* [그림] 작성할 구조 변경 감시자 실행화면 구조 변경 감시자 응용에서는 프로세스 목록 새로 고침 버튼을 클릭하면 리스트 박스에 프로세스 목록을 표시합니다. 프로세스 목록 리스트 상자에서 항목을 선택하면 선택한 프로세스의 자동화 요소를 가운데 리스트 상자에 표시합니다. 그리고 선택한 프로세스의 메인 창의 자식 요소를 추가하거나 제거하는 이벤트가 발생하면 이를 마지막 리스트 상자에 표시합니다. 이를 위해 UI 자동..

반응형