바. 폼

먼저 가상 커서를 정의합시다. 원격 제어를 하는 곳에서는 상대 호스트의 마우스 위치를 화면에 표시해야 합니다. 이 부분을 도구 스타일의 작은 폼으로 정의합시다. 프로젝트에 폼을 하나 추가합니다. 여기에서는 VirtualCursorForm이라고 명명할게요.

 

Form의 AutoSizeMode를 GrowAndShrink로 설정하세요. BackColor는 Red, FormBorderSytle은 None, TopMost를 True로 지정합니다.

 

폼의 Load 이벤트 핸들러를 등록하세요.

Remote 클래스 단일체의 키보드와 마우스 이벤트 수신 이벤트 핸들러를 등록하세요.

만약 수신한 메시지가 마우스 이동 이벤트일 때 위치를 변경합니다.

 

 

[소스 9.13] VirtualCursorForm.cs

 

 

이번에는 원격 제어할 때 대상 호스트의 화면을 표시하는 RemoteCleintForm 폼을 추가하세요.

 

자식 컨트롤로 PictureBox 컨트롤을 추가하고 이름을 pbox_remote으로 정합시다. PictureBox 컨트롤의 Dock 속성을 Fill로 설정하고 SizeMode 속성르 StretchImage로 설정하세요.

멤버 필드로 이미지를 수신하였는지 확인하는 멤버와 이미지 크기를 기억할 멤버를 선언하세요.

이미지 전송 클라이언트 개체를 가져오기하는 속성을 정의하여 코드를 간결하게 합시다.

폼의 Load 이벤트 핸들러를 등록합니다.

원격 제어기 단일체의 이미지 수신 이벤트 핸들러를 등록합니다.

check가 false일 때 키보드, 마우스 이벤트를 송신하는 클라이언트를 가동하고 초기 설정합니다.

그리고 이벤트로 전달받은 이미지로 PictureBox 컨트롤의 Image 속성을 설정합니다.

폼의 KeyDown 이벤트 핸들러를 등록합니다.

check가 참일 때 누른 키를 이벤트 전송 클라이언트에게 보냅니다.

폼의 KeyUp 이벤트를 등록합니다.

마찬가지로 check가 참일 때 뗀 키를 이벤트 전송 클라이언트에게 보냅니다.

폼의 MouseMove 이벤트도 등록합니다.

check가 참을 때 마우스 좌표를 인자를 변환하여 이벤트 전송 클라이언트에게 보냅니다.

마우스의 좌표를 대상 호스트의 좌표로 변환하여 반환합니다.

폼의 MouseDown 이벤트 핸들러도 등록합니다.

현재 마우스 좌표를 얻어와서 이벤트 전송 클라이언트에게 보냅니다.

 

 

폼의 MouseUp 이벤트 핸들러도 등록합니다.

버튼 정보를 이벤트 전송 클라이언트에게 보냅니다.

 

 

 

[소스 9.14] RemoteClientForm.cs

 

 

마지막으로 MainForm을 구현합시다. 프로젝트 생성 시에 만들어진 Form1의 이름을 MainForm으로 변경하세요.

 

[그림 9.02] MainForm 자식 컨트롤 배치
[그림 9.02] MainForm 자식 컨트롤 배치
번호 컨트롤 타입 컨트롤 명 설명
1 TextBox tbox_ip 원격 제어 대상 호스트 IP 주소 입력
2 Button btn_setting 원격 제어 대상 호스트에게 요청
3 TextBox tbox_controller_ip 원격 제어기 호스트 IP 주소
4 Button btn_ok 원격 제어 허용
5 Timer timer_send_img 이미지 수신 타이머
6 NotifyIcon noti 원격 제어를 당할 때 Notify 아이콘

[표 9.2] Form1의 컨트롤 배치

 

가상 커서와 원격 제어 화면과 상대 IP와 포트를 멤버를 선언합니다.

폼의 Load 이벤트 핸들러를 등록하세요.

가상 커서 폼과 원격 제어 호스트 화면을 표시할 폼을 생성합니다.

원격 제어 요청을 수신하였을 때의 처리 이벤트 핸들러를 등록합니다.

 

상대 IP 주소를 텍스트 박스에 표시하고 IP와 포트 정보를 멤버에 설정합니다.

폼의 FormClosed 이벤트 핸들러를 등록하여 해제화 작업을 작성합니다.

설정하기 버튼 클릭 이벤트 핸들러를 등록하세요.

입력한 IP가 자신의 IP일 때는 제어할 수 없음을 알려줍니다.

입력한 IP를 얻어와서 원격 제어기를 가동합니다.

화면 크기에 맞게 원격 제어 호스트의 화면을 띄우줄 rcf 폼의 크기를 설정하여 시각화합니다.

원격 제어 허용 버튼의 클릭 이벤트 핸들러를 등록합니다.

MainForm은 화면에서 숨깁니다.

키보드와 마우스 이벤트를 수신하는 Remote 클래스의 단일체를 가동합니다.

이미지 수신 타이머도 가동하고 가상 커서도 시각화합니다.

Notify 아이콘의 더블 클릭 이벤트 핸들러를 등록합니다. 여기에서는 화면에서 숨겼던 자신을 시각화합니다.

이미지 수신 타이머 이벤트 핸들러를 등록합니다.

먼저 사각 영역을 얻어옵니다.

얻어온 사각 영역 크기의 비트맵 개체를 생성합니다.

이미지로부터 Graphics 개체를 구합니다.

사각 영역의 크기로 Size 개체를 생성합니다.

화면의 전체 이미지를 복사합니다.

Graphics 개체는 더 이상 할 것이 없으므로 해제합니다.

이미지 전송 클라이언트 개체를 생성합니다. 이미지 수신 서버는 포트번호를 20004로 하드 코딩한 상태입니다.

이미지 전속 클라이언트 개체의 비동기 방식으로 이미지를 전송하는 SendImageAsync 메서드를 호출합니다.

예외가 발생하면 이미지 전송 타이머를 멈추고 서버에 연결이 실패하였음을 알려줍니다.

원격 제어 프로그램 만들기를 마칠게요. 이를 응용하는 것은 여러분의 몫으로 남깁니다.

 

 

[소스 9.15] MainForm.cs