"Porque há
um só Deus, e um só Mediador entre Deus e os
homens, Jesus Cristo homem."
1 Timóteo 2:5
C#
- Salvando telas de forma automática em um período
![]() |
Hoje vamos criar um pequeno projeto usando a linguagem C# que vai permitir salvar telas de forma automática em um período de tempo definido. |
Publico com frequência pequenos exemplos de programas feitos em uma determinada linguagem com objetivo de mostrar a utilização de um recurso da linguagem para fins de estudo.
Hoje veremos um programa feito na linguagem C# que permite salvar telas de forma automática em um período de tempo definido pelo usuário e armazenar as imagens em uma pasta específicada.
O objetivo é mostrar como usar os controles Timer, NumericUpDown, FolderBrowserDialog e salvar imagens usando recursos do namespace System.Drawing como Bitmap e Graphics e os métodos CopyFromScreen e Save.
Criando o projeto no VS 2017 Community
Crie um novo projeto do tipo Windows Forms App(.NET Framework) no Visual Studio 2017 Community com o nome de ScreenShot.
No formulário padrão Form1.cs inclua os seguintes controles:
Disponha os controles conforme o leiaute abaixo:
1- Os namespaces usados no projeto :
using System;
using System.Drawing;
using System.Windows.Forms;
2 - No início do formulário vamos definir as
variáveis
int frequencia;
int intervalo = 1000;
int contador = 0;
Defina também a variável que define o caminho onde as telas serão salvas:
string caminhoSalvarImagem =
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
3 - No evento Load do formulário inclua o código
abaixo atribui o caminho na caixa de texto, e exibe o número de telas salvas e
ative o tempo em minutos:
private void Form1_Load(object sender, EventArgs e) { txtLocal.Text = caminhoSalvarImagem; lblTelasSalvas.Text = contador.ToString(); //define em minutos o salvamento de tela rdbMinutos.Checked = true; } |
4- No evento Click do botão de comando usamos o controle FolderBrowserDialog para selecionar outra patas para salvar as imagens das telas:
private void btnLocal_Click(object sender, EventArgs e) { FolderBrowserDialog fbd1 = new FolderBrowserDialog(); // Define as propriedades do controle FolderBrowserDialog fbd1.Description = "Selecione uma pasta para realizar o Backup"; fbd1.RootFolder = Environment.SpecialFolder.MyComputer; fbd1.ShowNewFolderButton = true; // Exibe a caixa de diálogo
if (fbd1.ShowDialog() == DialogResult.OK)
{
// Exibe a pasta selecionada
txtLocal.Text = fbd1.SelectedPath;
caminhoSalvarImagem = fbd1.SelectedPath;
}
}
|
5 - A seguir no evento CheckedChanged do controle CheckBox temos o código que define o temporizador para salvar a tela em um determinado período de tempo:
private void cbAtivar_CheckedChanged(object sender, EventArgs e)
{
// define o temporizador para salvar a tela
if (cbAtivar.Checked)
{
if (rdbSegundos.Checked)
{
frequencia = Convert.ToInt32(nupdTempo.Value) * (intervalo * 1); // segundos
}
if (rdbMinutos.Checked)
{
frequencia = Convert.ToInt32(nupdTempo.Value) * (intervalo * 60); // minutos
}
if (rdbHoras.Checked)
{
frequencia = Convert.ToInt32(nupdTempo.Value) * (intervalo * 3600); // horas
}
// ativar o timer
timerSalvarTela.Interval = frequencia;
timerSalvarTela.Enabled = true;
}
else
{
timerSalvarTela.Enabled = false; // para o timer }
}
|
5 - O evento Tick do controle Timer timerSalvaTela temos o código que salva a tela
private void timerSalvaTela_Tick(object sender, EventArgs e) { try { // salva a tela Bitmap svTela = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); Graphics svTelaArquivo = Graphics.FromImage(svTela); svTelaArquivo.CopyFromScreen(0, 0, 0, 0, new Size(svTela.Width, svTela.Height)); svTela.Save(caminhoSalvarImagem + @"\tela_" + DateTime.Now.ToString("ddMMyyyyHHmmss") + ".png"); contador = contador + 1; lblTelasSalvas.Text = contador.ToString(); } catch (Exception exc) { // houve erro, exibe cbAtivar.Checked = false; MessageBox.Show("Ocorreu um erro , a tela não foi salva." + Environment.NewLine + Environment.NewLine + "Technical details:" + Environment.NewLine + exc.Message); } } |
6 - Para exibir a hora atual usamos o evento Tick o controle Timer1:
private void timer1_Tick(object sender, EventArgs e) { this.lblRelogio.Text = DateTime.Now.ToString(); } |
Executando o projeto iremos obter o seguinte resultado:
![]() |
![]() |
Pegue o código do projeto aqui:
ScreenShot.zip
"Porque há
um só Deus, e um só Mediador entre Deus e os
homens, Jesus Cristo homem."
1 Timóteo 2:5
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? ![]() |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET
Criando uma proteção de tela - Macoratti
VB .NET - Capturando e Salvando telas - Macoratti
VB .NET - Desabilitando o protetor de tela do Windows - Macoratti
C# - Capturando telas - Macoratti
C# - Capturando e Salvando Imagens da WebCam - Macoratti