Tip/Trick: Cómo capturar la pantalla

A veces nos puede resultar útil o necesario capturar la pantalla del usuario. Y para esto nos podemos servir de las librerías de GDI+.

Para nuestro ejemplo usaremos un Form, un Timer y un PictureBox llamados Form1, _tmr y _pctrBx respectivamente y la propiedad Enable del Timer la establecemos en True.

Antes de nada en nuestra clase Form1 declaramos:

// Buffer de gráficos

Graphics _grphcs;

//Imagen que se mostrará en el PictureBox

Bitmap _btmp;

 

//Ancho de la pantalla

int _screenWidth;

//Alto de la pantalla

int _screenHeight;

Ahora en el constructor del Form, debajo de InitializeComponent establecemos las variables declaradas:

//Creamos la imagen con tamaño 150px x 150px

_btmp = new Bitmap(150, 150);

//Creamos el buffer apartir de la imagen

_grphcs = Graphics.FromImage(_btmp);

//Establecemos el ancho de la pantalla

_screenHeight = Screen.PrimaryScreen.WorkingArea.Height;

//Establecemos el alto de la pantalla

_screenWidth = Screen.PrimaryScreen.WorkingArea.Width;

Ahora en el evento Tick del Timer añadimos el siguiente código:

//Obtenemos la posición del cursor

Point _pnt = Cursor.Position;

//Centramos el cursor

_pnt.X -= 75;

_pnt.Y -= 75;

//Rellenamos la imagen de negro para las zonas no visibles

_grphcs.FillRectangle(Brushes.Black, new Rectangle(0,0,150,150));

//Obtenemos la captura de la pantalla usando la posicion que obtuvimos

//antes del cursor, copiamos la imagen en la posición (0,0) y usamos

//el tamaño de siempre

_grphcs.CopyFromScreen(_pnt, new Point(0, 0), _btmp.Size);

//Por último establecemos el BitMap como imagen del PictureBox

_pctrBx.Image = _btmp;

El código completo sería:

public partial class Form1 : Form

{

    // Buffer de gráficos

    Graphics _grphcs;

    //Imagen que se mostrará en el PictureBox

    Bitmap _btmp;

    //Ancho de la pantalla

    int _screenWidth;

    //Alto de la pantalla

    int _screenHeight;

 

    public Form1()

    {

        InitializeComponent();

        //Creamos la imagen con tamaño 150px x 150px

        _btmp = new Bitmap(150, 150);

        //Creamos el buffer apartir de la imagen

        _grphcs = Graphics.FromImage(_btmp);

        //Establecemos el ancho de la pantalla

        _screenHeight = Screen.PrimaryScreen.WorkingArea.Height;

        //Establecemos el alto de la pantalla

        _screenWidth = Screen.PrimaryScreen.WorkingArea.Width;

 

    }

 

    private void _myTimer_Tick(object sender, EventArgs e)

    {

        //Obtenemos la posición del cursor

        Point _pnt = Cursor.Position;

        //Centramos el cursor

        _pnt.X -= 75;

        _pnt.Y -= 75;

        //Rellenamos la imagen de negro para las zonas no visibles

        _grphcs.FillRectangle(Brushes.Black, new Rectangle(0,0,150,150));

        //Obtenemos la captura de la pantalla usando la posicion que obtuvimos

        //antes del cursor, copiamos la imagen en la posición (0,0) y usamos

        //el tamaño de siempre

        _grphcs.CopyFromScreen(_pnt, new Point(0, 0), _btmp.Size);

        //Por último establecemos el BitMap como imagen del PictureBox

        _pctrBx.Image = _btmp;

    }

}

Podéis descargar el código fuente aquí.

Espero que os sea útil.

No Comments