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.ScreenNo 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