Copiar Pantalla Completa con C#

Que tal amigos!

Hace unos días me entró la duda de como copiar la pantalla desde una aplicación C# y esta es la manera mas sencilla de hacerla.  Realice una pequeña aplicación para probar que funcionara bien y luce mas o menos asi:

CapturaPantallaI

CapturaPantallaI

Más adelante publicaré como capturar solamente un área seleccionada y como capturar únicamente la ventana activa.  Si deseas realizar el ejemplo, al final de esta publicación encontrarás la liga para descargarlo.

Éste es el código necesario para copiar la pantalla completa:

 try
            {
                //Estas líneas son necesarias para ocultar totalmente el windows form de la captura de pantalla.
                this.Hide();
                System.Threading.Thread.Sleep(250);
                //Obtenemos la resolución de pantalla
                Rectangle escritorio = Screen.GetBounds(this.ClientRectangle);
                //Creamos un Bitmap del tamaño de nuestra pantalla
                using (Bitmap b = new Bitmap(escritorio.Width, escritorio.Height))
                {
                    //Creamos el gráifco en base al Bitmap 
                    using (Graphics g = Graphics.FromImage(b))
                    {
                        //Transferimos la captura al objeto g en base a las mediad del bitmap
                        g.CopyFromScreen(0, 0, 0, 0, b.Size);
                        //Almacenamos la captura
                        b.Save(@"C:\CapturaPantallaI.png", ImageFormat.Png);

                        //Lo mostramos en el WindowsFom
                        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.ImageLocation = @"C:\CapturaPantallaI.png";
                    }
                }
            }
            catch (InvalidEnumArgumentException ieae)
            {
                MessageBox.Show(ieae.ToString());
            }
            catch (Win32Exception we)
            {
                MessageBox.Show(we.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                this.Show();
            }
Espero que les sea de ayuda y espero sus comentarios!
Da clic aqui para descargar el archivo con el código fuente.
Happy Programming!

Fuente

http://www.codeproject.com/KB/cs/globalhook.aspx

http://www.eggheadcafe.com/community/aspnet/2/10046854/want-to-draw-on-image.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.pointtoclient.aspx

http://jalpesh.blogspot.com/2007/06/how-to-take-screenshot-in-c.html

http://www.mindfiresolutions.com/How-to-take-screenshot-programmatically-and-mail-it-in-C-647.php

http://ifdefined.com/blog/post/Screen-capture-utility-in-C-NET.aspx

http://www.developerfusion.com/code/4630/capture-a-screen-shot/

http://www.geekpedia.com/tutorial181_Capturing-screenshots-using-Csharp.html

http://www.codeproject.com/KB/cs/TeboScreen.aspx

http://stackoverflow.com/questions/1481124/capturing-altprintscreen-hot-key-and-clipboard-contents