C# - Capturando a tela
Hoje vou apresentar uma opção para capturar a tela usando um projeto console. |
Hoje vou mostrar uma forma bem mais simples que você pode usar e adaptar às suas necessidades.
Vamos criar um projeto Console no VS 2022 Preview usando o .NET 8 chamado CapturaTela.
No arquivo de projeto vamos incluir a referência a Microsoft.WindowsDesktop,App.WindowsForms :
<ItemGroup> <FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" /> </ItemGroup> |
Agora que temos uma referência para System.Windows.Forms, podemos obter as dimensões da tela – estamos interessados nas coordenadas iniciais (x e y) e em seu tamanho (w e h). Obtemos essas informações de SystemInformation.VirtualScreen.
Assim na classe Program vamos incluir o código abaixo:
using
System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; var screen = SystemInformation.VirtualScreen; int x = screen.Left; Console.WriteLine("Iniciar captura de tela\nTecle algo para
iniciar..."); string fileName = $"Screenshot {DateTime.Now:yyyy-MM-dd HHmmss}.png"; image.Save(filePath, ImageFormat.Png); Console.WriteLine("Tela capturada e salva em : " + filePath); Console.ReadKey(); |
Entendendo o código :
SystemInformation.VirtualScreen
retorna um retângulo que representa as dimensões da tela virtual, que é o
tamanho total de todas as telas no desktop.x
,
y
)
do canto superior esquerdo e a largura (w
)
e altura (h
)
da tela virtual são extraídas:Console.ReadKey()
aguarda o usuário pressionar uma tecla antes de continuar.
Bitmap
do
tamanho da tela virtual é criado:
var image = new Bitmap(w, h);
Graphics
é criado a partir desse Bitmap :
usingvar
graphics = Graphics.FromImage(image);
graphics.CopyFromScreen
copia a imagem da tela virtual para o
Bitmap
criado, usando as coordenadas e o tamanho obtidos anteriormente.string picturesDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
string fileName = $"Screenshot {DateTime.Now:yyyy-MM-dd HHmmss}.png";
Path.Combine
é usado para criar o caminho completo do arquivo.image.Save
salva o Bitmap
na localização especificada no formato PNG.Por fim, a localização onde a imagem foi salva é mostrada no console.
Resumindo, este código faz o seguinte:
Executando o projeto teremos o seguinte resultado:
Abrindo o arquivo : Screenshot 2023-11-22 184654.png teremos a imagem a seguir:
E estamos conversados...
"Porque Deus enviou o seu Filho ao mundo, não para que
condenasse o mundo, mas para que o mundo fosse salvo por ele."
João 3:17
Referências:
C# - Tasks x Threads. Qual a diferença
DateTime - Macoratti.net
Null o que é isso ? - Macoratti.net
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis)