none
Controle do mouse e do teclado no computador Remoto RRS feed

  • Pergunta

  • Bom pessoal estou trabalhando em um projeto de suporte remoto (complicado) depois de muita pesquisa na net encontrei pouco assunto sobre isso parece coisa de outro mundo, mais já consigo compartilha em uma rede local agora o próximo passo passo é ter o controle do mouse e do teclado, depois disso ver como acessar outra maquina é em outro estado mais o passo de cada vez. Esse projeto é para uma empresa de automação comercial e que ter sua própria ferramenta de suporte remoto. Vou colocar os código do servidor e do cliente não tenho interesso de esconder o projeto posso compartilhar com vocês.

    Servidor.

     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace LdmRemotoServer
    {
        public partial class Form2 : Form
        {
            private int port;
            private TcpClient client;
            private TcpListener server;
            private NetworkStream mainStream;

            private readonly Thread Listening;
            private readonly Thread GetImage;
            public Form2(int Port)
            {
                port = Port;
                client = new TcpClient();
                Listening = new Thread(StartListening);
                GetImage = new Thread(ReceiveImage);

                InitializeComponent();
            }

            private void StartListening()
            {
                while (!client.Connected)
                {
                    server.Start();
                    client = server.AcceptTcpClient();
                }
                GetImage.Start();
            }

            private void StopListening()
            {
                server.Start();
                client = null;
                if (Listening.IsAlive) Listening.Abort();
                if (GetImage.IsAlive) GetImage.Abort();
            }

            private void ReceiveImage()
            {
                BinaryFormatter binformatter = new BinaryFormatter();
                while (client.Connected)
                {
                    mainStream = client.GetStream();
                    pictureBox1.Image = (Image)binformatter.Deserialize(mainStream);
                }
            }

            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                server = new TcpListener(IPAddress.Any, port);
                Listening.Start();
            }

            protected override void OnFormClosing(FormClosingEventArgs e)
            {
                base.OnFormClosing(e);
                StopListening();
            }
        }
    }

    ---------------------------------------------------------------------------------------------------------

    Agora o cliente.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Linq;
    using System.Net.Sockets;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace LdmRemotoCliente
    {
        public partial class Form1 : Form
        {
            private readonly TcpClient client = new TcpClient();
            private NetworkStream mainStream;
            private int portNumber;

            private static Image GrabDesktop()
            {
                Rectangle bounds = Screen.PrimaryScreen.Bounds;
                Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb);
                Graphics graphic = Graphics.FromImage(screenshot);
                graphic.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy);
                return screenshot;
            }

            private void SendDesktopImage()
            {
                BinaryFormatter binFormatter = new BinaryFormatter();
                mainStream = client.GetStream();
                binFormatter.Serialize(mainStream, GrabDesktop());

            }
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }

            private void bntConnect_Click(object sender, EventArgs e)
            {
                portNumber = int.Parse(txtPort.Text);
                try
                {
                    client.Connect(txtIp.Text, portNumber);
                    //MessageBox.Show("Connected");
                    MessageBox.Show("Conectado.");
                }
                catch(Exception)
                {
                    MessageBox.Show("Falha na Conecxão.");
                }
            }

            private void bntSend_Click(object sender, EventArgs e)
            {
                if(bntSend.Text.StartsWith("Compartilhar"))
                {
                    timer1.Start();
                    bntSend.Text = "Parar Compartilhamento";
                }
                else
                {
                    timer1.Stop();
                    bntSend.Text = "Compartilhar Tela";
                }
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                SendDesktopImage();
            }
        }
    }

    ---------------------------------------------------------------------------------------------

    Como funciona: Especifico uma porta no servidor e listo ai abre o formulário com um PictureBox onde vai aparecer a tela do computador q estamos acessando ai  no cliente digita a porta e o IP e manda conectar ai aparece o aviso conectado depois compartilhar a tela beleza visualizo a tela vejo tudo que a pessoa faz mais não controlo mouse e teclado. Lembrando que esta funcionando apenas em uma rede local depois de consegui controla o mouse e teclado ai vamos tentar acessa maquina de outra rede em outro estado.

    Agora pergunto como faço para controla o mouse e o teclado da maquina que estamos acessando em que local do código posso fazer isso ou se tem outra maneira de fazer esse tipo de projeto se alguém puder min ajudar fico muito grato, se alguém ficar interessado em participar do projeto também ficarei muito grato. Desde já agradeço a atenção. Obrigado e fiquem com Deus meus irmãos.

     
    quarta-feira, 24 de maio de 2017 01:06

Todas as Respostas