9. 원격 제어 프로그램 만들기

소프트웨어 접근성은 신체적 환경적 조건에도 소프트웨어를 사용할 수 있게 하는 성질을 말합니다. 이번에는 자신이 접근하고자 하는 컴퓨터와 물리적으로 다른 위치에 있는 환경적 제약을 극복하는 원격 제어 프로그램을 만드는 작업을 해 봅시다.

이번에 만들 프로그램은 UI 자동화와 직접적인 연관은 없습니다. 여러분께서 여기에서 사용한 기술과 UI 자동화 기술을 접목하면 보다 접근성 높은 보조 도구나 평가 도구를 만들 수 있을 것입니다. 여기에서는 UI 자동화 기술을 직접 사용하는 부분은 생략하고 원격 제어 프로그램을 만드는 것까지만 소개할 것입니다.

여기에서 만드는 원격 제어 프로그램은 클라이언트와 서버를 하나로 만들기로 합시다. 화면도 전체 화면을 제어할 수 있고 선택적인 영역을 제어하는 부분이나 특정 프로세스를 제어하는 부분은 제공하지 않을 것입니다.

여러분들은 이 프로그램과 함께 자동화 기술을 매시업하여 보다 나은 보조 기술이나 평가 도구를 만들어 보세요.

먼저 윈도우즈 Forms 응용 프로젝트 템플릿을 선택하여 프로젝트를 생성하세요. 그리고 기본으로 제공하는 Form1의 이름을 솔루션 창에서 이름 바꾸기를 하여 MainForm으로 변경하세요. 솔루션 창에서 폼의 이름을 바꾸면 마법사에 의해 소스 코드의 클래스 이름도 자동으로 변환해 줍니다.

다음은 여기에서 만들 원격 제어 프로그램에 정의할 형식들입니다.

[그림 9.01] 원격 제어 프로그램 클래스 다이어그램
[그림 9.01] 원격 제어 프로그램 클래스 다이어그램
클래스 명역할
MainForm원격 제어 서버 설정, 원격 제어 허용
RemoteClientForm원격 호스트 화면 시각화 폼
VirtualCursorForm가상(원격 제어) 커서
Controller원격 제어 컨트롤
Remote피 원격 제어 컨트롤
SetupClient원격 제어 요청 송신(클라이언트 소켓)
SetupServer원격 제어 요청 수신(서버 소켓)
ImageServer원격 호스트 화면 수신(서버 소켓)
ImageClient원격 호스트 화면 송신(클라이언트 소켓)
SendEventClient원격 제어 키보드, 마우스 이벤트 송신(클라이언트 소켓)
RecvEventServer원격 제어 키보드, 마우스 이벤트 수신(서버 소켓)
RecvKMEEventArgs원격 제어 키보드, 마우스 이벤트 수신 이벤트 아규먼트
RecvKMEEventHandler원격 제어 키보드, 마우스 이벤트 수신 이벤트 대리자
RecvImageEventArgs원격 호스트 화면 수신 이벤트 아규먼트
RecvImageEventHandler원격 호스트 화면 수신 이벤트 대리자
RecvRCInfoEventArgs원격 제어 요청 Accept 이벤트 아규먼트
RecvRCInfoEventHandler원격 제어 요청 Accept 이벤트 대리자
KeyFlag키보드 이벤트 열거형
MouseFlag마우스 이벤트 열거형
MsgType키보드, 마우스 이벤트 열거형
Meta키보드, 마우스 이벤트 관련 정보

[표 9.1] 원격 제어 프로그램 형식과 역할