일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 산책하기 좋은 곳
- 무료 동영상 강의
- C++
- 실습
- 소스 코드
- 표준 라이브러리 함수
- Windows Forms
- 표준 입출력
- 원격 제어 프로그램
- 클래스 다이어그램
- 졸업 작품 소재
- 졸업 작품
- 실습으로 다지는 c#
- 파이썬
- 충남 천안
- c언어
- 알고리즘
- 추천
- 프로젝트
- 소켓 통신
- c#
- 안드로이드 앱 개발
- 캡슐화
- 네트워크 프로그래밍
- 언제나휴일
- 유튜브 동영상 강의
- 동영상
- 동영상 강의
- 언제나 휴일
- 강의
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C#] 원격 제어 프로그램 18. 원격 클라이언트 폼 본문
1. 유튜브 동영상 강의
2. 원격 클라이언트 폼
이번에는 원격 제어할 때 대상 호스트의 화면을 표시하는 RemoteCleintForm 폼을 추가하세요.
자식 컨트롤로 PictureBox 컨트롤을 추가하고 이름을 pbox_remote으로 정합시다. PictureBox 컨트롤의 Dock 속성을 Fill로 설정하고 SizeMode 속성르 StretchImage로 설정하세요.
멤버 필드로 이미지를 수신하였는지 확인하는 멤버와 이미지 크기를 기억할 멤버를 선언하세요.
bool check;//이미지 수신 여부
Size csize; //클라이언트 폼 크기
원격 호스트를 제어하기 위한 키보드와 마우스 이벤트를 전송에 사용할 클라이언트를 속성으로 제공합시다.
SendEventClient EventSC
{
get
{
return Controller.Singleton.SendEventClient;
}
}
속성 창을 이용하여 Load 이벤트 핸들러를 등록하세요.
private void RemoteCleintForm_Load(object sender, EventArgs e)
{
컨트롤로의 단일체에 이미지 수신 이벤트 핸드러를 등록하세요.
Controller.Singleton.RecvedImage += new RecvImageEventHandler(
Singleton_RecvImageEventHandler);
}
void Singleton_RecvImageEventHandler(object sender, RecvImageEventArgs e)
{
만약 한 번도 이미지를 수신하지 않았다면 이벤트 클라이언트를 가동하세요.
if (check == false)
{
Controller.Singleton.StartEventClient();
check = true;
이벤트 인자로 받은 부분은 원격 제어 호스트의 데스크 톱 화면의 크기입니다.
csize = e.Image.Size;
}
수신한 이미지로 pbox_remote의 Image 속성을 설정하면 수신한 이미지를 PictureBox에 표시합니다.
pbox_remote.Image = e.Image;
}
속성 창을 이용하여 KeyDown 이벤트 핸들러를 등록하세요.
private void RemoteCleintForm_KeyDown(object sender, KeyEventArgs e)
{
if (check == true)
{
check가 true면 제어 중이므로 키 누름 이벤트 정보를 전송합니다.
EventSC.SendKeyDown(e.KeyValue);
}
}
속성 창을 이용해서 KeyUp 이벤트 핸들러를 등록하세요.
private void RemoteCleintForm_KeyUp(object sender, KeyEventArgs e)
{
if (check == true)
{
check가 true면 제어 중이므로 키 뗌 이벤트 정보를 전송합니다.
EventSC.SendKeyUp(e.KeyValue);
}
}
속성 창을 이용해서 pbox_remote 컨트롤의 MouseMove 이벤트 핸들러를 등록하세요.
private void pbox_remote__MouseMove(object sender, MouseEventArgs e)
{
check가 true면 제어 중이므로 마우스 이동 정보를 전송합니다. 이 때 좌표는 원격 제어 호스트 화면 크기에 맞게 변환하여 전송합니다.
if (check == true)
{
Point pt = ConvertPoint(e.X, e.Y);
EventSC.SendMouseMove(pt.X, pt.Y);
}
}
좌표를 변환하는 ConvertPoint 메서드를 추가하세요.
private Point ConvertPoint(int x, int y)
{
x좌표는 원격 호스트의 너비를 곱한 값을 pbox_remote의 너비로 나눈 값으로 변환합니다.
int nx = csize.Width * x / pbox_remote.Width;
y좌표는 원격 호스트의 높이를 곱한 값을 pbox_remote의 높이로 나눈 값으로 변환합니다.
int ny = csize.Height * y / pbox_remote.Height;
변환한 nx, ny로 Point 개체를 만들어 반환하세요.
return new Point(nx, ny);
}
속성 창을 이용하여 pbox_remote 컨트롤의 MouseDown 이벤트 핸들러를 등록하세요.
private void pbox_remote_MouseDown(object sender, MouseEventArgs e)
{
check가 true면 제어 중이므로 마우스 누름 이벤트 정보를 전송합니다.
if (check == true)
{
Text = e.Location.ToString();
EventSC.SendMouseDown(e.Button);
}
}
속성 창을 이용하여 pbox_remote 컨트롤의 MouseUp 이벤트 핸들러를 등록하세요.
private void pbox_remote_MouseUp(object sender, MouseEventArgs e)
{
check가 true면 제어 중이므로 마우스 뗌 이벤트 정보를 전송합니다.
if (check == true)
{
EventSC.SendMouseUp(e.Button);
}
}
다음은 이번 실습에서 작성한 소스 코드입니다.
//RemoteCleintForm.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace 원격제어기
{
/// <summary>
/// 원격 클라이언트 폼
/// </summary>
public partial class RemoteCleintForm : Form
{
bool check;//이미지 수신 여부
Size csize; //클라이언트 폼 크기
SendEventClient EventSC
{
get
{
return Controller.Singleton.SendEventClient;
}
}
/// <summary>
/// 생성자
/// </summary>
public RemoteCleintForm()
{
InitializeComponent();
}
private void RemoteCleintForm_Load(object sender, EventArgs e)
{
Controller.Singleton.RecvedImage +=
new RecvImageEventHandler(Singleton_RecvImageEventHandler);
}
void Singleton_RecvImageEventHandler(object sender, RecvImageEventArgs e)
{
if (check == false)
{
Controller.Singleton.StartEventClient();
check = true;
csize = e.Image.Size;
}
pbox_remote.Image = e.Image;
}
private void pbox_remote__MouseMove(object sender, MouseEventArgs e)
{
if (check == true)
{
Point pt = ConvertPoint(e.X, e.Y);
EventSC.SendMouseMove(pt.X, pt.Y);
}
}
private Point ConvertPoint(int x, int y)
{
int nx = csize.Width * x / pbox_remote.Width;
int ny = csize.Height * y / pbox_remote.Height;
return new Point(nx, ny);
}
private void pbox_remote_MouseDown(object sender, MouseEventArgs e)
{
if (check == true)
{
Text = e.Location.ToString();
EventSC.SendMouseDown(e.Button);
}
}
private void pbox_remote_MouseUp(object sender, MouseEventArgs e)
{
if (check == true)
{
EventSC.SendMouseUp(e.Button);
}
}
private void RemoteCleintForm_KeyDown(object sender, KeyEventArgs e)
{
if (check == true)
{
EventSC.SendKeyDown(e.KeyValue);
}
}
private void RemoteCleintForm_KeyUp(object sender, KeyEventArgs e)
{
if (check == true)
{
EventSC.SendKeyUp(e.KeyValue);
}
}
}
}
'프로젝트 > C# 원격제어 프로그램' 카테고리의 다른 글
[C#] 원격 제어 프로그램 14. 원격 제어 컨트롤러 (0) | 2024.01.08 |
---|---|
[C#] 원격 제어 프로그램 15. 키보드, 마우스 이벤트 래퍼 (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 16. 원격 제어 호스트 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 17. 가상 커서 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 19. MainForm (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 - 보너스 트랙 1. 화면 캡쳐/이미지 송수신 (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 - 보너스 트랙 2. 오토 키보드 구현 (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 - 보너스 트랙 3. 키보드 마우스 이벤트 송수신 (0) | 2024.01.08 |