Captura de tela com C#

Que tal capturar a tela usando seu próprio software?

1. Inicie um novo projeto C# no VS, monte o window form a seguir, contendo um botão, uma pictureBox.

CapturarTelaC

2. Antes da linha public Form1() acrescente o seguinte código que irá capturar a resolução da sua tela e criar uma variável do tipo Graphics

 Graphics g;
 //define a largura e altura para serem iguais a da tela
 int TelaLargura = Screen.PrimaryScreen.Bounds.Width;
 int TelaAltura = Screen.PrimaryScreen.Bounds.Height;

3. No botão de captura, coloque o seguinte código;

 //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
 pictureBox1.Image = b;

O resultado será:

CapturarTelaC_002

 

Você também pode salvar o arquivo no formato .jpg, para isso adicione o componente saveFileDialog ao seu Window Form. Adicione também um botão, dentro deste botão acrescente o seguinte código que irá salvar a imagem;

//abre a janela de dialogo SaveDialog para salvar o arquivo gerado na captura
 DialogResult res = saveFileDialog1.ShowDialog();
 if (res == DialogResult.OK)
 {
 //obtem a extensão do arquivo salvo
 string ext = System.IO.Path.GetExtension(saveFileDialog1.FileName);
 if (ext == ".jpg") pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}

Para finalizar, altere a propriedade Filter do componente para JPEG Files|*.jpg 

Problemas comuns

No exemplo acima, a aplicação que você desenvolveu que irá fazer a captura também aparecerá no print. Uma forma de resolver isso é esconder a tela e exibi-la novamente após a captura.

Para esconder a tela da aplicação durante a captura usamos o código a seguir;

this.Hide(); //esconde a tela

Para voltar a exibi-la;

this.Show();

Outro problema, é que a captura da tela pode levar mais tempo do que se espera de modo que é necessário o uso do componente timer para fazer a captura. O timer deve ser iniciar somente quando o usuário clicar no botão capturar.

timer1.Start(); // inicia o relógio do timer.

e

timer1.Stop(); // para o timer

Deixe seu comentário