Developing

C# – Screenshot

Introdução

Esse post abordará a criação de uma simples aplicação que tira um printscreen e salva o mesmo em um local escolhido pelo desenvolvedor, ou simplesmente um windows forms screenshot C#.

This post shows how to create a simple application to take/shot a screenshot (print screen) and save it.

Criando o formulário

Altere a propriedade Name para principalForm

Adicione um controle Button da toolbox

Altere a propriedade Name do Button para btnShot e a propriedade Text para Shot

De dois clicks no Button para criar o evento Click

Nesse momento seu formulário deve estar parecido com este:

Screenshot Form

Screenshot Form

O Código

Inclua os using:

using System.Threading;

using System.Drawing.Imaging;

Crie uma variável no escopo global que fará a contagem dos screenshots tirados para que não sobreecreva nenhum arquivo.

Dentro do evento Click do nosso botão entre com o código para tirar o screenshot.

// Declara uma variável para fazer a contagem dos screenshots
private int nScreenshot = 0;

private void btnShot_Click(object sender, EventArgs e)
{
// Cria os objetos necessários
Bitmap bmpScreenshot;
Graphics gfxScreenshot;

// Esconde o form para ele não aparecer no screenshot
// Hide the form so that it does not appear in the screenshot
this.Hide();

// Espera um tempo para garantir que o form escondeu
// Wait a second
Thread.Sleep(1000);

// Seta o obejto bitmap com o tamanho da tela
// Set the bitmap object to the size of the screen
bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);

// Cria um objeto graphics a partir do bitmap
// Create a graphics object from the bitmap
gfxScreenshot = Graphics.FromImage(bmpScreenshot);

// Tira o screenshot do canto superior esquerdo até o canto inferior direito
// Take the screenshot from the upper left corner to the right bottom corner
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

// Salva o screenshot no local indicado e no formato esolhido
// Save the screenshot to the specified path
bmpScreenshot.Save("teste" + nScreenshot + ".png", ImageFormat.Png);

// Exibe o form
this.Show();

// Incrementa o contador para que o próximo screenshot não sobrescreva o anterior.
nScreenshot++;
}

Melhorias

É possivél fazer com que a aplicação tire o screenshot sem ser necessário clicar no botão.

É possvél criar uma série de configurações para que o usuário acerte o acreenshot do jeito que preferir. Configurações como por exemplo o formato a ser tirado o screenshot, o local onde será salvo, o nome da imagen e etc.

_____

Não esqueça de deixar seu comentário, critica, elegio, dúvida e etc. Ele é muito importante para a melhoria do blog.

Comments on: "C# – Screenshot" (9)

  1. Ola Guilherme!

    Pegando carona neste post…………

    No meu form eu tenho um botao.
    Este botao liga o timer().
    Como fazer para este botao ligar e desligar o timer mudando de cor e texto?
    silvio pontes

    • Silvio, o que fiz foi criar uma variável que fará o controle do toogle button. A variável Value apenas serve aqui para mostrar o valor do timer em um label.

      private Boolean Clicked = false;
      private Int32 Value = 0;

      private void button1_Click(object sender, EventArgs e)
      {
      Clicked = !Clicked;

      if (Clicked)
      {
      button1.Text = "Rodando";
      button1.BackColor = Color.Red;
      timer1.Enabled = true;
      }
      else
      {
      button1.Text = "Parado";
      button1.BackColor = Color.Green;
      timer1.Enabled = false;
      }
      }

      private void timer1_Tick(object sender, EventArgs e)
      {
      label1.Text = Value++.ToString();
      }

      Estou elaborando o tuto para o zedgraph.

      • Funcionou uma beleza Guilherme; estava fazendo isso com 2 botões.
        Agora veja só, para te ajudar no tuto, montei um passo a passo de como baixar e instalar o ZedGraph no VS2010, também estou fazendo um passo a passo de instalação no sharpdevelop: http://sharpdevelop.net/opensource/sd/ . Vou colocar isso no Youtube e no meu blog, ok?

        Como fazer para o grafico ja estar funcionando ao chamar a aplicação?
        private void zedGraphControl1_onLoad(object sender,EventArgs e)
        {…….}?

        http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/602f6dfb-a177-49d7-9016-e02e73e9209b

        Na resposta acima você mencionou PointPairList!

        Eu tenho:

        string varch2m=textBox5.Text.Substring(3,5);
        int varch2mint=Convert.ToInt32(varch2m);
        //textBox7.AppendText(varch2mint.ToString()+”\n”);
        listBox2.Items.Add(varch2mint);

        string varch7m=textBox5.Text.Substring(9,5);
        int varch7mint=Convert.ToInt32(varch7m);
        //textBox8.AppendText(varch7mint.ToString()+”\n”);
        listBox3.Items.Add(varch7mint);

        string varch10m=textBox5.Text.Substring(15,5);
        int varch10mint=Convert.ToInt32(varch10m);
        //textBox9.AppendText(varch10mint.ToString()+”\n”);
        listBox4.Items.Add(varch10mint);

        Como eu devo inserir os int varch2mint, varch7mint e varch10mint no PointPairList?
        Lembrando que não devem ficar muito perto para que as datas e horas possam ser legiveis.

        Respeitosamente,
        silvio pontes

  2. Gabriel said:

    Valeu !!!

  3. Bom dia, estou iniciando com sharpdevelop e gostaria de uma força; um passo a passo de como gerar o executável a partir de um solução ja criada.De já obrigado.

Leave a reply to ES – Controle de Versão « Guilherme Ferrera Cancel reply