Tutorial C# – PrintScreen

34 Comentários

No desenvolvimento de aplicações, a gestão dos erros do programa é dos aspectos mais importantes. Não só para ajudar a identificar o respetivo erro, como também para melhorar o próprio software. Mas nem sempre é fácil perceber o que originou o erro, e o que o cliente estava a executar naquele preciso momento.

Um “printscreen” por vezes é sem dúvida muito importante para identificarmos qual o momento em que o erro “surgiu”, mas aqui temos um ponto problemático, por mais incrível que pareça, existem muitos utilizadores que não sabem como fazer um “printscreen” e depois guardar a imagem.



Para ultrapassar a falta de conhecimento de alguns utilizadores, nada melhor do que o software efectuar o “printscreen” sozinho.

Este é um procedimento extremamente simples, mas já encontrei na internet tutoriais incrivelmente complexos para efectuar “printscreen” numa aplicação em C#.

Neste tutorial abordarei três “tipos” de “printscreen”.

  1. PrintScreen a todo o ecrã (directo para o desktop)
  2. PrintScreen apenas à aplicação (directo para o desktop)
  3. PrintScreen apenas à aplicação (com escolha do caminho para guardar imagem)

Para começar, é necessário que a aplicação tenha os seguintes elementos.

  • Picture box (apenas para ter uma imagem na aplicação)
  • Botão para PrintScreen a todo o ecrã
  • Botão para PrintScreen apenas à aplicação
  • Botão para PrintScreen com escolha do caminho para guardar imagem

PrintScreen 1

Como poderão verificar, o código é extremamente simples.

PrintScreen a todo o ecrã (directo para o desktop)

Temos de adicionar o seguinte namespace

E desta forma extremamente simples, já conseguimos efectuar o printscreen do ecrã.

O PrintScreen de todo ecrã é interessante, mas pode ser considerado intrusivo caso estejamos apenas a efectuar esse PrintScreen para analisar um possível erro.

Neste caso, é preferível apenas capturar a imagem do programa.

O código para este caso é semelhante ao anterior, pelo qual também é bastante simples.

Aproveito também para demonstrar outra forma de definir o bitmap.

PrintScreen apenas à aplicação (directo para o desktop)

Com um código praticamente igual ao anterior, alterando apenas onde o PrintScreen é “iniciado”, conseguimos capturar apenas a aplicação.

PrintScreen apenas à aplicação (com escolha do caminho para guardar imagem)

Para que seja possível ao utilizador escolher onde guardar a imagem, basta efectuar uma alteração na parte final do código.

Após definirmos qual a área a ser copiada.

Inserimos o seguinte código:

 

Em realce, podemos verificar o título deste “Save Image Dialog” e a extensão.

PrintScreen

Como puderam verificar, é extremamente simples efectuar um PrintScreen através de uma aplicação em C#, sem ser necessário importar dll’s do Windows como cheguei a visualizar em tutoriais na internet.

Download: Código Fonte

Comentários

34

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Diogo Silva
    Diogo Silva

    Isto é porreiro. Já tive oportunidade de pesquisar sobre este tema na web, e na grande maioria era necessário importar dll’s do windows. Continuação de bom trabalho pplware.

    Diogo Silva

  2. Avatar de José Marques
    José Marques

    Mt bom.. Obg!

  3. Avatar de Paulo Ferreira
    Paulo Ferreira

    Já programei em C mas C# nunca.
    Como é que compilo isso?

    1. Avatar de Fernando Silva
      Fernando Silva

      Boas Paulo,
      para programar em C# (e posterior compilação) necessitas da ferramenta Microsoft Visual Studio.
      Podes programar em várias línguas, sendo o C# uma delas.

      Espero ter ajudado.

      1. Avatar de Paulo Ferreira
        Paulo Ferreira

        mehhh não tenho nada disso. Obrigado.

        Não se arranjar por aí isso? 😉

        1. Avatar de Álison Fernandes

          Claro que sim, a Microsoft disponibiliza versões gratis do Visual Studio, denominada Express. Apenas tens de escolher qual queres (podes ter vários instalados):

          http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop

        2. Avatar de Pedro Matos
          Pedro Matos

          Olá Paulo boa tarde,
          Para ter o Visual Studio é necessário pagar uma licença, no entanto, pode fazer o download da versão Express na Microsoft, versão essa que é free.

          Cumprimentos.

          1. Avatar de Paulo Ferreira
            Paulo Ferreira

            A ideia era arranjarem-me o programa já compilado e pronto a usar, para não ter de instalar o programa. Visto que o código fonte está aí disponível.

            De qualquer maneira estou a instalar.
            Obrigado na mesma

        3. Avatar de Hélio Moreira
          Hélio Moreira

          Caro Paulo,

          Se fizer download do código fonte, terá uma pasta com o nome bin e dentro dessa pasta terá outra com o nome debug. Aí terá acesso ao executável.

          Cumps.
          Hélio Moreira

  4. Avatar de jedi
    jedi

    Muito bom tutorial. brigado. 😉

  5. Avatar de fil
    fil

    Quem desenvolve uma aplicação não cria um mecanismo de print screen para identificar erros, as imagens são demasiado pesadas em espaço e pouco vão informar sobre o problema que ocorreu.

    Normalmente é gerado log para um ficheiro ou base de dados, o utilizador poderá ou não enviar um print screen para ajudar caso a aplicação mostrar uma mensagem de erro.

    1. Avatar de Hélio Moreira

      Caro fil,

      Antes de mais agradeço o seu comentário.

      O printscreen é apenas mais uma ajuda para tentar identificar o erro. O log é fundamental, e vou preparar um tutorial sobre esse tema.

      Mas como o próprio diz “o utilizador poderá ou não enviar um print screen para ajudar caso a aplicação mostrar uma mensagem de erro.”, e eu pergunto: E a quantidade de utilizadores que não sabem fazer um printscreen e guardar imagem?

      Volto a reforçar que o printscreen é um complemento a um ficheiro de logs / erros.

      Cumps,
      Hélio Moreira

      1. Avatar de Pedro Levi
        Pedro Levi

        Boas Hélio!

        Bom tutorial, recentemente fiz algo parecido e que penso ser interessante no ambito do que estás a fazer.
        Passa por colocar um 4º botão em que fazes printscreen a uma janela de um processo expessifico através do handler deste. No caso fiz esse pequeno projecto associado a uma library open source de OCR (tesseract) para resolver uns catpchas…

        fica só a sugestão do quarto botão.

        1. Avatar de Hélio Moreira
          Hélio Moreira

          Caro Pedro,

          Não queres fazer um tutorial sobre essa opção 🙂

          Cumps,
          Hélio Moreira

          1. Avatar de Pedro Levi
            Pedro Levi

            Hélio,
            Terei todo o gosto em acrescentar o 4º botao e fazer um capture de uma aplicação em especifico.
            prefiro retirar a parte do OCR que isso provavelmente em pouco iria ajudar os leitores que se estão a iniciar.

  6. Avatar de Zé Metralha
    Zé Metralha

    … e para quem não tem conhecimentos de programação… poderá sempre recorrer, por exemplo, ao software gratuito PhotoScape que não só trata imagem como tem outras ferramentas entre elas captura de écran…

  7. Avatar de carlos
    carlos

    qual é lógica de ter um programa destes para tirar printscreen a por exemplo um erro que aparece durante a execução de outro programa quando ao tirar um printscreen aparece este programa em primeiro plano?

    1. Avatar de Hélio Moreira

      Caro Carlos,

      O objectivo não é usar este programa para tirar “printscreens” de outros programas, mas sim para tirar o “printscreen” na execução do programa por nós desenvolvido e que em determinado momento deu erro.

      Imagina o seguinte cenário:

      Desenvolves-te um programa, e por algum motivo não fizes-te uma validação necessária.
      Quando o programa “estoura”, além de gravar num ficheiro de logs, era interessante que tirasse um “printscreen” do ecrã onde deu o erro… Dessa forma pode ser mais fácil perceber o que o utilizador fez que causasse aquele erro.

      Cumps,
      Hélio Moreira

      1. Avatar de carlos
        carlos

        ok. agora percebi.
        já agora porque está ali aquela picturebox? podia estar a ser utilizada neste exemplo para apresentar a imagem do printscreen

        1. Avatar de Hélio Moreira
          Hélio Moreira

          A picture box foi colocada por dois motivos:
          – “Embelezar” o programa 🙂
          – Visualizar o printscreen

          Para não complicar, este segundo ponto fica para outro tutorial.

          Cumps,
          Hélio M

    2. Avatar de Pedro Levi
      Pedro Levi

      Mas é possivel tirar um printScreen de qq outra aplicação.
      “process.handler”

  8. Avatar de António
    António

    Muito bom, ainda à poucos dias mandei um bug report para o Chromium e se não me engano juntamente envia um screenshot automático, logo está provada a utilidade deste código. Muito bom especialmente se o bug for no “user interface”.
    Obrigado pelo bom trabalho.

  9. Avatar de fil
    fil

    O código de print screen auto até é porreiro sugiro que o completas o teu exemplo com o código de o anexar automaticamente a um email e o enviar por SMTP ou o guardar em ficheiro e enviar por FTP.

    Mas sou da opinião que o print screen neste tipo de situação não traz benefícios. No caso da linguagem C# quando houver um erro e se o programa estiver bem implementado será apanhado uma exception e mostrado uma mensagem de erro simpática para o user. Neste tipo de situação o que se quer é o stacktrace e valores de variáveis e não um print screen da mensagem “simpática” do erro de código real.

    1. Avatar de Hélio Moreira
      Hélio Moreira

      Em relação a anexar o printscreen é uma ideia bastante interessante. E não é de difícil implementação…

      A ideia neste caso do print screen é que o mesmo seja executado mesmo antes da excepcion, pois no caso de existir um form com vários campos, podemos rapidamente identificar onde ocorreu o erro. Contudo, este código de printscreen serve para inúmeros casos e não só para o registo de erros.

      Cumps.

      Hélio Moreira

  10. Avatar de Diogo Freitas
    Diogo Freitas

    Deveriam fazer mais deste gênero (por exemplo não consigo perceber aqueles tutorial de bases de dados pois ainda não tenho as bases necessárias e com este tutorial sem bases nesta linguagem consegui)para o pessoal ainda novo na programação evoluir mais rapidamente.

  11. Avatar de David Ferreira
    David Ferreira

    Eu não vejo grande utilidade nisto, pois o windows tem atalhos para o fazer!

    1. Avatar de Hélio Moreira
      Hélio Moreira

      Caro David,

      Respondo ao seu comentário com um parágrafo do tutorial:

      “(…)por mais incrível que pareça, existem muitos utilizadores que não sabem como fazer um “printscreen” e depois guardar a imagem.”

      Cumps,
      Hélio Moreira

      1. Avatar de Ricardo
        Ricardo

        Hélio teria alguma forma de fazer um PrintScreen de um programa especifico que estiver rodando, por exemplo, se eu tenho o torrent.exe aberto tirar um print dele e mostra na picturebox

  12. Avatar de Pedro
    Pedro

    Porreiro era isto mas para asp.net com C#…

  13. Avatar de Carlos
    Carlos

    Excelente artigo. Parabéns 🙂

  14. Avatar de Pedro Lamas

    Sem dúvida que gosto da iniciativa e acho que devem continuar, no entanto não posso deixar de reparar que a solução peca por falta de controlo da memória, ou seja, falta fazer Dispose() a todos os elementos gráficos e mesmo à caixa de diálogo de Save File! 😉

  15. Avatar de Guilherme
    Guilherme

    Como pode ser feito para que sempre salve com um nome diferente a imagem?

  16. Avatar de Felipe
    Felipe

    Muito bom, obrigado pelo post!