VB .NET - Capturando e Salvando telas


Neste programa feito na linguagem VB .NET podemos capturar e salvar as telas do computador local e salvar as telas no formato JPG.

Os dois formulários usados no projeto são vistos a seguir:

No primeiro temos os seguintes controles inseridos a partir da ToolBox:

O segundo formulário possui os seguintes controles:

Funciona assim:

Você pode capturar a tela atual diretamente clicando no botão Capturar ou pode ainda definir um tempo de até 5 segundos usando o controle NumericUpDown. Se o contador for selecionado o segundo formulário irá exibir um contador regressivo antes de exibir a tela capturada no primeiro formulário. Durante este processo a opacidade do primeiro formulário é alterada para zero até a exibição final do contador quando retorna a 100.

A seguir temos o código usando no primeiro formulário :

Public Class Form1
    Dim timp As New DateTime()
    Private Sub btnCapturar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCapturar.Click
        Me.Opacity = 0
        If chkContador.Checked = True Then
            contador.ShowDialog()
        End If
        Me.ShowInTaskbar = False
        timp = Now()
        Dim bounds As Rectangle
        Dim _tela As System.Drawing.Bitmap
        Dim graph As Graphics
        bounds = Screen.PrimaryScreen.Bounds
        _tela = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        graph = Graphics.FromImage(_tela)
        graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
        picTela.Image = _tela
        Me.Opacity = 100
        Me.ShowInTaskbar = True
        btnSalvar.Enabled = True
        btnLimpar.Enabled = True
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        Dim filesavedialog1 As New SaveFileDialog
        SaveFileDialog1.Title = "Salvar tela"
        SaveFileDialog1.FileName = "tela_" & timp.ToString("HH-mm-dd-MM-yyyy") & ".jpg"
        SaveFileDialog1.Filter = "JPEG File| .jpg"
        Try
            If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                picTela.Image.Save(SaveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
        picTela.Image = Nothing
        btnSalvar.Enabled = False
        btnLimpar.Enabled = False
    End Sub

    Private Sub chkContador_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkContador.CheckedChanged
        If chkContador.Checked = True Then
            nupContador.Enabled = True
        ElseIf chkContador.Checked = False Then
            nupContador.Enabled = False
        End If
    End Sub
End Class

O código definido no segundo formulário é o seguinte:

Public Class contador
    Dim i As Integer = Form1.nupContador.Value
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If i > 0 Then
            i -= 1
            Label1.Text = i
        Else
            Me.Close()
        End If
    End Sub

    Private Sub contador_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Label1.Text = i
    End Sub
End Class

Neste código estamos usando o evento Tick do controle Timer para exibir o contador na tela antes de encerrar a captura da tela selecionada.

Executando o projeto e capturando uma tela temos o resultado abaixo:

 

Muito fácil e simples com o VB .NET.

Pegue o projeto completo aqui: CapturaTelas.zip

João 14:25 Estas coisas vos tenho falado, estando ainda convosco.

João 14:26 Mas o Ajudador, o Espírito Santo a quem o Pai enviará em meu nome, esse vos ensinará todas as coisas, e vos fará lembrar de tudo quanto eu vos tenho dito.

Referências:


José Carlos Macoratti