VB .NET - Capturando a tela e enviando remotamente (espião)


 Neste artigo eu vou mostrar como criar um programa para capturar a tela exibida do computador e enviar a imagem remotamente para outro programa. Teremos assim  dois programas: um que envia as imagens e outro que recebe. É um programa bem simples mas que aborda conceitos importantes da linguagem VB .NET.

Neste artigo vamos utilizar os seguintes recursos da linguagem VB .NET :

Classe TcpClient -  Fornece métodos simples para se conecta, enviar, e o receber fluxo de dados em uma rede no modo de bloqueio síncrono.

Para que a classe TcpClient possa se conectar e trocar dados, um TcpListener ou Socket criado com o TCP ProtocolType deve estar escutando por solicitações de conexão recebidas.Você pode se conectar a este ouvinte em uma das seguintes maneiras:

Classe TcpListner - Fornece métodos simples que escutam e aceitam solicitações de conexão de entrada no bloqueio de modo síncrono.Você pode usar tanto um TcpClient quanto um Socket para conectar-se com um TcpListener.

Classe NetworkStream - O NetworkStream classe fornece métodos para enviar e receber dados sobre um Stream sockets em modo de bloqueio.

Para criar um NetworkStream, você deve fornecer um Socket conectado. Você também pode especificar qual permissão FileAccess a NetworkStream tem sobre o Socket. Por padrão, fechar o NetworkStream não fecha os Socket fornecidos. Se você quiser que o NetworkStream tenha permissão para fechar os, você deve especificar true para o valor da do parâmetro ownsSocket.

Classe BinaryFormatter - Serializa e deserializa um objeto, ou um grafo de objetos conectados, em formato binário.

A classe BinaryFormatter implementa a interface IRemotingFormatter para suportar chamadas de procedimento remoto (RPCs), e a interface IFormatter para oferecer suporte a serialização de um gráfico de objetos.

Vamos então ao que interessa...

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando a aplicação cliente que envia as imagens

Vamos iniciar criando o projeto que irá capturar a tela , se conectar com a aplicação remota em um endereço e porta e irá enviar a imagem.

Abra o VS Community 2015 e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome VBNET_VisualizadorRemoto e clique no botão OK;

A partir da ToolBox inclua no formulário os seguintes controles:

Disponha os controles no formulário conforme a figura abaixo:

A seguir declare os namespaces no formulário:

Imports System.Net.Sockets
Imports
System.Runtime.Serialization.Formatters.Binary

Logo a pós a declaração do formulário vamos definir as variáveis que vamos usar no projeto:

Dim cliente As New TcpClient
Dim nstream As NetworkStream

Agora vamos criar o método para capturar a tela :

 Public Function CapturaTelaDesktop() As Image
        Dim limites As Rectangle = Nothing
        Dim tela As Bitmap = Nothing
        Dim grafico As Graphics = Nothing
        limites = Screen.PrimaryScreen.Bounds
        tela = New Bitmap(bounds.Width, bounds.Height, Imaging.PixelFormat.Format32bppArgb)
        grafico = Graphics.FromImage(tela)
        grafico.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
        Return tela
    End Function

O método retorna a imagem do gráfico da tela capturada.

Agora vamos criar o método para enviar a imagem:

Private Sub EnviarImagem()
        Try
            Dim bf As New BinaryFormatter
            nstream = cliente.GetStream
            bf.Serialize(nstream, CapturaTelaDesktop())
        Catch ex As Exception
            MessageBox.Show("Erro : " & ex.Message)
        End Try
 End Sub

Neste código criamos uma instância de BinaryFormatter e obtemos o stream a partir do cliente

No evento Click do botão Conectar  inclua o código abaixo:

 Private Sub btnConectar_Click(sender As Object, e As EventArgs) Handles btnConectar.Click
        Try
            cliente.Connect("127.0.0.1", 8085)
        Catch ex As Exception
            MsgBox("Falhou ao se conectar...")
        End Try
  End Sub

Aqui estamos conectando com uma aplicação que esta em localhost(127.0.0.1) e esta escutando na porta 8085.

Para concluir, no evento Click do botão Ativar Envio de Dados , inclui o código abaixo:

 Private Sub btnEnviarImagem_Click(sender As Object, e As EventArgs) Handles btnEnviarImagem.Click
        Timer1.Start()
    End Sub

Para enviar a imagem pasta inclui a chamada do método EnviarImagem() no evento Tick do controler Timer. Assim a cada 2 segundos teremos o envio da imagem:

 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        EnviarImagem()
 End Sub

Agora é só alegria...

Executando o projeto e clicando no botão Conectar iremos nos conectar com a aplicação que vai receber a imagem.

Ao clicar no botão - Ativar Envio de dados - estaremos ativando o timer para chamar a cada 2 segundos o método EnviarImagem:

Na segunda parte do artigo vamos criar a aplicação que vai receber e exibir as imagens enviadas pelo nosso programa.

Pegue o projeto completo da primeira parte aqui :   VBNET_VisualizadorRemoto.zip

Porque a palavra da cruz é loucura para os que perecem; mas para nós, que somos salvos, é o poder de Deus.
1 Coríntios 1:18

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti