C# - Capturando telas


Que tal uma aplicação para capturar telas usando a linguagem C# ?

Abra o seu Visual C# 2008 Express Edition e crie um projeto do tipo Windows Forms Application no menu File -> New Project e informe o nome CapturaTela;

Obs: Podemos usar o mesmo código usando o Visual C# 2010 Express Edition

A seguir no formulário form1.cs da aplicação inclua ao seguintes controles:

Defina no formulário form1.cs os controles conforme o leiaute da figura abaixo:

Vamos ao código da aplicação...

1- Código do evento Click do botão - Capturar Tela:

 private void btnCapturarTela_Click(object sender, EventArgs e)
 {
     //oculta o formulário e inicia a captura
     this.Hide();
     tmTela.Start();
 }

Ao clicar no botão Capturar Tela a rotina oculta o formulário atual e dispara o evento do controle timer onde temos o seguinte código que irá capturar a tela:

Sem a utilização do timer não seria possível esconder o formulário atual.

   private void timer1_Tick(object sender, EventArgs e)
        {
            //armazena a imagem no bitmap
            Bitmap b = new Bitmap(TelaLargura, TelaAltura);
            //copia  a tela no bitmap
            g = Graphics.FromImage(b);
            g.CopyFromScreen(Point.Empty, Point.Empty, Screen.PrimaryScreen.Bounds.Size);
            //atribui a imagem ao picturebox exibindo-a
            picTela.Image = b;
            this.Show();
            //habilita o botão para salvar a tela
            btnSalvarTela.Enabled = true;
            //encerra o timer
            tmTela.Stop();
        }

O código do botão Salvar Tela é mostrado a seguir. Ele abre uma janela de diálogo e salva a tela capturada:

 private void btnSalvarTela_Click(object sender, EventArgs e)
        {
            //abre a janela de dialogo SaveDialog para salvar o arquivo gerado na captura
            DialogResult res = svdTela.ShowDialog();
            if (res == DialogResult.OK)
            {
                //obtem a extensão do arquivo salvo
                string ext = System.IO.Path.GetExtension(svdTela.FileName);
                if (ext == ".jpg")
                    picTela.Image.Save(svdTela.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                else if (ext == ".gif")
                    picTela.Image.Save(svdTela.FileName, System.Drawing.Imaging.ImageFormat.Gif);
                else if (ext == ".png")
                    picTela.Image.Save(svdTela.FileName, System.Drawing.Imaging.ImageFormat.Png);
            }
        }

Para encerrar temos o código dos botões Limpar e Encerrar que limpa o controle PictureBox e encerra a aplicação:

    private void btnEncerrar_Click(object sender, EventArgs e)
    {
            this.Close();
   }

   private void btnLimpar_Click(object sender, EventArgs e)
   {
         this.picTela.Image = null;
   }

Executando o projeto e capturando uma tela teremos como resultado algo parecido com a imagem abaixo: (Observe que o formulário do projeto não foi capturado)

Simples, simples assim...

Eu sei é apenas C# , mas eu gosto...

Pegue o projeto completo aqui: CapturaTela.zip
Referências:

José Carlos Macoratti