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


 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 seria o que envia as imagens e outro que recebe. É um programa bem simples mas que aborda conceitos importantes da linguagem VB .NET.

Na primeira parte do artigo criamos a aplicação que copia a tela, faz a conexão com a aplicação que vai receber a imagem e envia imagens a cada intervalo de tempo, que no exemplo foi definido como 2000 milisegundos ou 2 segundos.

Vamos criar agora a aplicação que vai receber e exibir as imagens.

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 que recebe as imagens

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_Remoto_Recebedor 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
Imports
System.Net.Sockets
Imports
System.Threading
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 client As New TcpClient
Dim server As New TcpListener(8085)
Dim nstream As NetworkStream
Dim listening As New Thread(AddressOf Escutar)
Dim getImage As New Thread(AddressOf ReceberImagem)

Observe que criamos uma instância de TcpListener que esta escutando na porta 8085, a mesma porta na qual a aplicação que envia as imagens se conecta.

Usamos o operador AddressOf que cria uma function delegate que aponta para a função especificada por procedurename; no nosso caso : Escutar e ReceberImagem.

Quando o procedimento especificado é um método de instância, então a função delegada refere-se tanto à instância quanto ao método. Então, quando a função delegada for invocada, o método especificado da instância é chamado.

Agora vamos definir o código do método Escutar:

Private Sub Escutar()
        While client.Connected = False
            server.Start()
            client = server.AcceptTcpClient
        End While
        getImagem.Start()
End Sub

Obtém a imagem obtida do cliente.

A seguir temos o código do método ReceberImagem:

  Private Sub ReceberImagem()
        Dim bf As New BinaryFormatter
        While client.Connected = True
            nstream = client.GetStream
            PictureBox1.Image = bf.Deserialize(nstream)
        End While
    End Sub

Neste código criamos uma instância de BinaryFormatter,  verificamos se a conexão com o cliente existe e obtemos o stream a partir do cliente exibindo a imagem no controle PictureBox após realizar a desserialização da mesma usando a classe BinaryFormatter.

No evento Click do botão Escutar  inclua o código abaixo que

Private Sub btnEscutar_Click(sender As Object, e As EventArgs) Handles btnEscutar.Click
        listening.Start()
End Sub

Aqui estamos iniciando a thread usando o método Start().

Agora é só alegria...

Vamos testar as nossas aplicações:

1- Primeiro execute o projeto : VBNET_Remoto_Recebedor

Clique no botão - Escutar.

Após isso nossa aplicação estará escutando na porta 8085 aguardando mensagens.

2- A seguir execute o projeto - VBNET_VisualizadorRemoto

Clique no botão Conectar para se conectar à aplicação em localhost na porta 8085.

Clique a seguir no botão - Ativar Envio dos Dados - de forma a ativar o timer para que a cada 2s uma imagem da tela seja capturada e enviada para ser exibida na aplicação que esta escutando na porta.

O resultado pode ser visto abaixo:

Uma cópia da tela é enviada e exibida no controle PictureBox a cada 2 segundos.

O programa é muito simples, e, para tornar o entendimento das threads e dos delegates mais fácil, eu não utilizei outros recursos como verificar a conexão, tratar os dados recebidos, tratar adequadamente os erros, etc.

Então você pode incrementar e melhorar este programa para torná-lo realmente funcional.

Pegue o projeto completo aqui : VBNET_Remoto_Recebedor.zip

E esta é a mensagem que dele (Jesus) ouvimos, e vos anunciamos: que Deus é luz, e não há nele trevas nenhumas.
Se dissermos que temos comunhão com ele, e andarmos em trevas, mentimos, e não praticamos a verdade.

1 João 1:5,6

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