Aug 30 2010

C# Como hacer una captura de pantalla

Category: ProgramacionIndigo @ 10:27 PM

En muchas aplicaciones de escritorio puede sernos útil recopilar información cuando se produzca una excepción no controlada. Podemos recopilar la información de la excepción analizando las propiedades Message o StackTrace. Otra información útil puede ser capturar la pantalla y ver que estaba haciendo el usuario en nuestra aplicación en el momento que falló.

Ojo, antes de continuar me gustaría comentar que en todos los casos, la información que se envía deberá ser aprobada por el usuario, antes del envío, o través de las herramientas de configuración de la propia aplicación. No hagamos las cosas a escondidas ya que tarde o temprano estás cosas se terminan detectando y las consecuencias pueden ser desastrosas.

Bien para esto he creado una clase que he llamado ScreenHelper con un método estático Capture, que nos ayudará a conseguir dicha funcionalidad devolviéndonos un objeto Image.

public class ScreenHelper
{
   public static Image Capture()
   {
       Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
       Graphics graphics = Graphics.FromImage(printscreen as Image);
       graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
       return (Image)printscreen;
   }
}

Este objeto Image lo podemos manipular, para por ejemplo redimensionarlo, o guardarlo en disco, para posteriormente enviarlo por correo electrónico. Para capturar y grabar la imagen usaremos otro método estático que llamaremos CaptureAndSave()

private static void CaptureAndSave()
{
  Image image = Capture();
  if (!Directory.Exists("directorio"))
      Directory.CreateDirectory("directorio");

  string path = Path.Combine("directorio", "nombrefichero");
  image.Save(path, ImageFormat.Png);
}

Como nota final destacar que antes de grabar la imagen, comprobaremos que el directorio donde vamos a grabar existe. También sería “casi obligatorio” utilizar el bloque try…catch para capturar cualquier excepción que se produzca en el proceso.

¡Compartelo!
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Add to favorites
  • BarraPunto
  • Bitacoras.com
  • LinkedIn
  • Meneame
  • RSS
  • Technorati
  • Twitter

Tags:

5 Responses to “C# Como hacer una captura de pantalla”

  1. Jnn says:

    Este código se puede utilizar en ambiente Web/ASP?

  2. Indigo says:

    Lo siento, pero esté código sólo es útil desde una aplicación de escritorio. Desde una aplicación web/asp este tipo de cosas no se pueden hacer, por lo menos de manera tradicional como esta.

  3. gabriel says:

    Hola veo que andan la mayoría en programación, quiero invitarlos a mi comunidad así crecemos entre todos:

    Foro oficial para registrarse: foro.revistaphp.com

    Blog oficial: http://www.revistaphp.com

    Es reciente pero no duden que con el aporte de muchos vamos a crecer

  4. ricardo sanchez says:

    era lo que estaba buscando, thanks,

  5. Yelinna says:

    Y sin llamadas a Apis de Windows (P/Invoke), esto debe ser exportable a Mono, genial :D

Leave a Reply