Ago 06 2008

Capturar una imagen de la ventana activa con VB.Net {

Tag: Mini Tips, VB.Net

Muchas veces nos es útil capturar una imagen del momento en que se produce un error para saber qué sucedió o cómo solucionarlo. Sin ir más lejos, en mi trabajo anterior instalamos una aplicación y a veces teníamos un error que después de hacer guardias de 8hs frente a los usuarios no pudimos encontrar y las explicaciones y suposiciones de los usuarios carecían totalmente de sentido.

Por eso mismo muchas veces es bueno capturar el estado de la aplicación en el momento, en este ejemplo vamos a capturar una imágen de la ventana activa y la vamos a guardar.

Lo primero que haremos será la función que captura la imágen, para eso utilizaremos el viejo y conocido recurso de apretar la tecla PRINT SCREEN, y para eso utilizaremos la función SendKeys.Send.

    Private Sub ImprimirPantalla()
        SendKeys.Send("{PRTSC}")
        GuardarImagenDesdeClipboard()
    End Sub

Lo que hemos hecho hasta este momento es capturar la imagen, la misma queda en el portapapeles de Windows, así que para que nos sea útil necesitamos guardarla en un archivo debidamente identificado, para ello extraeremos la imagen del portapapeles y nos crearemos un archivo cuyo nombre se comprondrá de la fecha-hora actual y el nombre de la clase que generó la excepción.

    Private Sub GuardarImagenDesdeClipboard()
        If Clipboard.ContainsImage() Then
            Dim NombreArchivo As String = String.Format("{0}_{1}.jpg", DateTime.Now.ToString("yyyyMMdd-HHmmss"), Me.Name)
            Dim Path As String = String.Format("{0}\logs\imagenes\{1}", Application.StartupPath, NombreArchivo)
            Dim img As Image = Clipboard.GetImage()
            img.Save(Path)
        End If
    End Sub

Hay que tener en cuenta que para que la imágen se guarde es necesario que el directorio donde se va a guardar exista previamente, por eso sería conveniente chequear su existencia y si es necesario crearlo, antes de intentar guardar la imagen.

}


Jul 25 2008

Obtener información de la pantalla con C# {

Tag: C#, Mini Tips

Más de una vez se puede dar una situación en la que necesitamos ubicar un form en determinada área de la pantalla, o redimensionarlo de acuerdo al tamaño de ésta, para eso necesitamos saber al menos el ancho y alto de nuestra pantalla, o sea la resolución de pantalla.

La función a continuación nos devuelve un String que contiene información útil acerca de la pantalla donde se está ejecutando la aplicación. Tomando esta función como ejemplo, se puede por ejemplo ubicar un form en la esquina inferior derecha de nuestra pantalla.

        public String InfoPantalla(System.Windows.Forms.Control c)
        {
            // \r\n es salto de línea y \t es tabulador
            return String.Format("Es Primario: \t{0}\r\nAncho: \t{1}\r\nAlto: \t{2}\r\nAncho útil: \t{3}\r\nAlto útil: \t{4}",
                System.Windows.Forms.Screen.FromControl(c).Primary, // Devuelve True si se trata del monitor principal del quipo
                System.Windows.Forms.Screen.FromControl(c).Bounds.Width, // Devuelve el ancho total de la pantalla
                System.Windows.Forms.Screen.FromControl(c).Bounds.Height, // Devuelve el alto total de la pantalla
                System.Windows.Forms.Screen.FromControl(c).WorkingArea.Width, // Devuelve el ancho útil de la pantalla, sin contar docks y taskbars
                System.Windows.Forms.Screen.FromControl(c).WorkingArea.Height); // Devuelve el alto útil de la pantalla, sin contar docks y taskbars
        }
    }

La función recibe un objeto Control porque está pensaga para ser implementada en una clase, pero si la misma se implementa en un WindowsForm, o por qué no, un UserControl, Screen.FromControl() puede recibir directamente this como parámetro.

}


Página 1 de 11