VB .NET - Capturando telas


Como capturar telas usando código VB .NET ?

O modo mais simples e rápido de capturar telas no VB .NET é usar o método CopyFromScreen do namespace System.Drawing.Graphics.

A classe Graphics possui o método CopyFromScreen que copia os dados da tela para um formato definido de arquivo.

Este método requer que você passe os pontos das coordenadas de origem e destino e o tamanho da imagem a ser copiada. Abaixo temos a declaração VB .NET:

Public Sub CopyFromScreen (sourceX As Integer, sourceY As Integer, destinationX As Integer, destinationY As Integer, _
blockRegionSize As Size )

Onde:

sourceX - Type: System..::.Int32
A coordenada X do ponto superior esquerdo da área do retângulo origem representando a tela.
sourceY -
Type: System..::.Int32
A coordenada Y do ponto superior esquerdo da área do retângulo origem representando a tela.
destinationX -
Type: System..::.Int32
A coordenada X do ponto superior esquerdo da área do retângulo destino representando a tela.
destinationY -
Type: System..::.Int32
A coordenada Y do ponto superior esquerdo da área do retângulo destino representando a tela.
blockRegionSize -
Type: System.Drawing..::.Size
O tamanho da área a ser transferida.


Vamos agora a um exemplo prático onde irei mostrar como usar este recurso.

Abra o Visual Basic 2008 Express Edition e crie um novo projeto do tipo Windows Application com o nome capturaTela;

Defina a seguir os namespaces usados:

Imports System.Windows.Forms.Screen
Imports
System.Drawing.Graphics

No formulário padrão inclua um controle PictureBox e dois controles Button conforme o leiaute abaixo:

No evento Click do botão de comando - Captura e Salva tela no disco local - inclua o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  salvaTela()
End Sub

A rotina salvaTela() usa o método CopyFromScreen para capturar a tela em seguida salvar o arquivo imagem gerado no formato .jpg no disco local: tela.Save(caminho & DateTime.Now.Second & ".jpg", Imaging.ImageFormat.Jpeg)

Onde caminho é refere-se a pasta local definida como c:\telas e DateTime.Now.Second retorna o segundo da hora atual para formar o nome do arquivo de forma a não haver repetição no nome do arquivo:

    ''' <summary> 
    ''' Este método salva a tela em uma pasta local
    ''' </summary> 
    ''' <returns></returns> 
    Private Sub salvaTela()
        Dim caminho As String = "c:\telas\"
        Try
            Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
            Dim tela As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
            Dim g As Graphics = FromImage(tela)

            g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenSize)
            tela.Save(caminho & DateTime.Now.Second & ".jpg", Imaging.ImageFormat.Jpeg)
        Catch ex As Exception
            MsgBox("Erro : " & ex.Message)
        End Try

    End Sub

Ao executar o projeto e clicar no botão - Captura e Salva tela no disco local - será gerado um arquivo BMP com a cópia da tela na pasta c:\telas.

No evento Click do botão de comando - Captura e exibe tela - inclua o código abaixo:

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        PictureBox1.Image = CapturaTela()
    End Sub

Onde o código da rotina CapturaTela() que retorna uma imagem do tipo BITMAP é dada a seguir:

''' <summary> 
    ''' Este método capture a tela e retorna um arquivo bmp
    ''' </summary> 
    ''' <returns>Um objeto Bitmap </returns> 
    Public Shared Function CapturaTela() As Bitmap
        Try
            Dim BMP As New Bitmap(PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height,Imaging.PixelFormat.Format32bppArgb)
            Dim GFX As Graphics = FromImage(BMP)
            GFX.CopyFromScreen(PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0,  Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
            Return BMP
        Catch ex As Exception
            MsgBox("Erro : " & ex.Message)
        End Try
    End Function

esta rotina faz exatamente a mesma coisa que a rotina anterior apenas retorna a tela capturada na forma de um arquivo .bmp.

Executando o projeto e clicando no botão - Captura e exibe tela - iremos obter:

Pegue o projeto completo aqui :  capturaTela.zip

Eu sei é apenas VB .NET, mas eu gosto...

Referências:


José Carlos Macoratti