Captura de pantalla en Visual Basic NET
En este ejercicio se propone una manera relativamente sencilla para capturar tanto la pantalla completa como la ventana activa, copiarlas al portapapeles para su uso en otro programa, y almacenarlas en disco como BMP. La aplicación arranca con el aspecto de un formulario que contiene:
A continuación se comentan los detalles más interesantes del código Visual Basic .NET.
| <STAThread()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1) End Sub #Region " Código generado por el Diseñador de Windows Forms " '...(código)... #End Region |
| ' Botón que activa
el temporizador 1 (intervalo: 2,5 segundos) Private Sub btGrab2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btGrab2.Click Timer1.Enabled = True Timer1.Start() End Sub ' Botón que activa el temporizador 2 (intervalo: 2,5 segundos) Private Sub btGrab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btGrab.Click 'minimizar el formulario para que no aparezca en la captura Me.WindowState = FormWindowState.Minimized Timer2.Enabled = True Timer2.Start() End Sub 'Temporizador 1 -> llama a la función GetWindowCapture (que captura 'al portapapeles la ventana activa), guarda la captura como JPG 'en C:\EmiWin.jpg y la muestra en el PictureBox Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'guardar la captura como JPG GetWindowCapture().Save("c:\EmiWin.jpg", ImageFormat.Jpeg) 'poner la captura en el control imgPantalla imgPantalla.Image = GetWindowCapture() 'formulario al primer plano con el foco Me.Activate() 'detener el temporizador Timer1.Stop() Timer1.Enabled = False End Sub ' Temporizador 2 -> llama a la función GetScreenCapture (que captura 'al portapapeles la pantalla), guarda la captura como JPG 'en C:\EmiScreen.jpg y la muestra en el PictureBox Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick 'guardar la captura como JPG GetScreenCapture().Save("c:\EmiScreen.jpg", ImageFormat.Jpeg) 'poner la captura en el control imgPantalla imgPantalla.Image = GetScreenCapture() 'detener el temporizador Timer2.Stop() Timer2.Enabled = False 'restaurar el formulario a su tamaño normal desde minimizado Me.WindowState = FormWindowState.Normal End Sub |
| 'Función que captura
la pantalla mediante el envío de la pulsación de la 'tecla "IMPR PANT". La función devuelve un objeto Image y lo coloca en el portapapeles. Public Function GetScreenCapture() As Image 'variable que guarda la pulsación de la tecla Dim objTecla As SendKeys '2 pulsaciones de IMPR PANT para capturar la pantalla entera objTecla.SendWait("{PRTSC 2}") 'variable de tipo IDataObject que contiene el portapapeles 'GetDataObject() es un método de IDataObject Dim objClipboard As IDataObject = Clipboard.GetDataObject() 'devolver el portapapeles como mapa de bits Return objClipboard.GetData(DataFormats.Bitmap) End Function 'Función que captura la ventana mediante el envío de la pulsación de la 'tecla "IMPR PANT". La función devuelve un objeto Image y lo coloca en el portapapeles Public Function GetWindowCapture() As Image 'variable que guarda la pulsación de la tecla Dim objTecla As SendKeys '1 pulsación de ALT + IMPR PANT para capturar la ventana activa objTecla.SendWait("%{PRTSC}") 'variable de tipo IDataObject que contiene el portapapeles 'GetDataObject() es un método de IDataObject Dim objClipboard As IDataObject = Clipboard.GetDataObject() 'devolver el portapapeles como mapa de bits Return objClipboard.GetData(DataFormats.Bitmap) End Function |
| 'variable de tipo
IDataObject que contiene el portapapeles 'GetDataObject() es un método de IDataObject Dim objClipboard As IDataObject = Clipboard.GetDataObject() 'devolver el portapapeles como mapa de bits Return objClipboard.GetData(DataFormats.Bitmap) |

Pulsa aquí para ver el código
completo.