Hacer que un Label sea realmente transparente en C#

En ocasiones necesitamos que en los “label” se vea el fondo, por que es una foto, cambia de color y no queremos ir cambiando el fondo de cada label, etc.

En la opción de color de fondo del “label”, en la pestaña de web, podemos elegir que el fondo sea transparente, que fácil, pongo el color en transparente y listo, ya podemos cambiar el fondo cuando queramos.

Opcion BackColor del Label
Parámetro para seleccionar el color de fondo
Color transparente Label
Poner el color del fondo en transparente

Pues no, esto funciona si lo que cambiamos es el fondo de formulario, pero si tenemos un “picturebox” o un “panel” o cualquier otra cosa que no sea el fondo del formulario, esto no funciona.

Esto se debe a que cuando añadimos un nuevo componente a nuestro formulario, este es automáticamente propiedad del formulario, y por ello el “label”, toma por defecto el color de fondo de su dueño.

Esto nos da la solución, si el color de fondo es el del propietario, lo que tenemos que hacer, para que nos funcione, es decirle quien es el dueño de nuestro “label” para que este, pueda coger el fondo que nosotros deseamos.

// Asignamos el propietario del label al picturebox
label1.parent = picturebox1;

Esto, para la mayoría de los casos, funciona, pero si el “label” lo vamos a mover por el formulario en tiempo de ejecución, este método nos puede causar un error. Debido a que el “label” esta fuera de su dueño.

Para solucionarlo tenemos que controlar en cada momento por donde movemos el “label”, y si esta fuera del “panel” o del “picturebox”, etc. bloquearlo y que no salga.

Para este problema se puede utilizar componentes externos al C#. pero como no era mi caso, no los he probado.

Otra cosa, si lo que queremos es hacer una especie de “OSD” para un vídeo (poner un texto y que se vea el vídeo por detrás), esto tampoco funciona. Los componentes de vídeo, ya sea el media player o VLC, son una especie de derivados de un panel, por lo que si le pasamos como propietaria a nuestro “label” el componente de vídeo, este tomara el color del fondo del componente que soporta el vídeo, es decir, el color del panel.

Aun así, con todos los “peros”, este método es la solución para el 90% de los casos.

Si tienes otra solución puedes compartirla en los comentarios.

 

 

Por que no debemos de fiarnos de las wifis publicas

Peligro WiFi publicas
Peligro WiFi publicas

En los últimos años ha proliferado mucho la instalación de redes wifi publicas, se ha creado una obsesión de tener que estar las 24 horas del día conectado. Por ello, muchos establecimientos han decidido ofrecer este tipo de conexión gratis, bares, bibliotecas, tiendas, etc, y por supuestos los hoteles.

El compartir la conexión a internet es fácil, instalo un router wifi en mi acceso a internet y listo, cualquiera lo puede hacer, no hay que ser un ingeniero de teleco para hacerlo. Y con eso, ya puedo gritar a los cuatro vientos, que la gente venga a mi local que ofrezco conexión a internet gratis.

Y hay es donde esta el problema, nos conectamos a cualquier red wifi que encontramos por hay, sin pensar lo que nos puede pasar. Si le preguntas a cualquiera sobre el tema, te dirá que ha él le da igual, que no tiene nada de importante en su móvil, tableta o portátil. Pero lo que no se dan cuenta, es que dentro de esos aparatos esta toda su vida, su agenda, sus cuentas de correos y de redes sociales, etc. Una simple foto hecha con el móvil, sacada en la playa, en una fiesta,  un “selfi”, etc, puede ser utilizada como gancho en paginas de pornografía, suplantación de identidad para un  pederasta que puede utilizarla de imagen de perfil en Facebook, etc. Para nosotros es una simple foto, sin posible valor alguno, pero para la delincuencia que se mueve por internet, es un tesoro.

Cualquier persona, y digo cualquiera, puede, con un una pequeña búsqueda en Google,  obtener millones de manuales de como instalar un troyano en cualquier dispositivo a través de la red. Sin hablar de las bandas organizadas que se dedican ha robar esos datos para luego vendérselos a terceras personas u organizaciones.

Soy un asiduo lector del blog de Chema Alonso, UN INFORMÁTICO EN EL LADO DEL MAL. Este blog se dedica ha la seguridad informática. Es considerado uno de los mejores hacker éticos españoles, una pena que sea un forofo incondicional de los productos de Microsoft 🙂

En este blog, a parte de escribir él, también escriben otros profesionales de la seguridad informática, y uno de estos, explica como, con un simple teléfono móvil, si se puede llamar simple a los teléfonos actuales, se puede hackear la red wifi de un hotel. Aunque, en este caso, ayuda mucho la poca conciencia y profesionalidad que tienen muchas de las empresas que se dedican a instalar este tipo de redes, y por supuesto, los dueños de los locales, que no se preocupan de las consecuencias que puede tener para sus clientes, la falta de seguridad en la red wifi que comparte.

En este caso el hotel se encuentra de una zona muy turística, lo que lo  hace de un lugar propicio para que algún delincuente o banda, que se dedique a la venta de datos, pueda hacer de las suyas, y utilizar estas redes, para poder acceder a la información de las miles de personas que se mueven por estas zonas, fácilmente.

Aquí os dejo el enlace al post en concreto “Auditar la WiFi del hotel con resaca y un jailbroken iPhone”

Si sabes de algún caso mas no dudes en dejar un comentario sobre el.

 

Conocer la duración del video en VideoLan (VLC) con C#

VLMC-IconTrasteando un poco con el activeX del VLC no encontraba como podía obtener la duración del vídeo que estaba reproduciendo. No tenia que ser muy difícil, es su reproductor se muestra, así que por algún lado tenia que haber una función  que devolviera el dichoso valor.  Encontré una que te devolvía todos los metadatos del vídeo, e incluso la posición actual en la que esta la reproducción del vídeo. Pero nada sobre la duración.

Después de darle varias vueltas, encontré una que, una vez que ha comenzado ha reproducirse el vídeo, nos devuelve esa información. Mientras tanto devuelve 0, lo que me engaño vilmente.

Para poder ver el valor tenemos que capturar el evento.

vVideoLan.MediaPlayerPlaying += vVideoLan_MediaPlayerPlaying;

Este evento salta cuando se pone a reproducir el vídeo.

Dentro de este evento podemos llamar a la función que ya nos devuelve la duración del vídeo.

TimeSpan tDuracionVideo = TimeSpan.FromMilliseconds(vVideoLan.input.Length);

La función “input.Legnth” nos devuelve la duración del vídeo en milisegundos.

Una vez que conocemos la duración del vídeo, podemos pasar ha obtener la posición actual de la reproducción. Esto es más fácil, solo tenemos que capturar el evento.

vVideoLan.MediaPlayerTimeChanged += vVideoLan_MediaPlayerTimeChanged;

Este evento se producirá cada vez que la posición del vídeo cambie, para saber la posición solo tenemos que poner.

int tPosicion = e.time;

Teniendo estos datos, ya se puede hacer la típica barra de progreso para saber cuanto falta para terminar el vídeo.

Pero resulta que tenemos un problema, no se, si es una fallo del VLC o que, pero el valor de “input.Length” y el valor final de “e.time” no son el mismo. El valor final de “e.time”, y todas la variantes que se puede obtener para sacar la misma información que he encontrada en el VLC, es unos milisegundos superior. Por lo que si lo ponemos de esta forma en una barra de progresos.

double max = fVideoLan.vVideoLan.input.Length;
pbPlay.Minimum = 0;
pbPlay.Maximum = (int)max;

// en MediaPlayerTimeChanged
pbPlay.Value = (int)fVideoLan.vVideoLan.input.Time;

Al llegar al final del vídeo, nos genera un error que le valor el superior al valor maximo. La diferencia es pequeña, no llega un segundo, por las pruebas que he hecho, ronda los 500 – 800 milisegundos, varia con cada video, no es fija. Por lo que, antes de pasar el valor actual de la posición del vídeo a la barra de progreso, compruebo que el valor sea igual o inferior.

if ( pbPlay.Maximum > vVideoLan.input.Time )
{
    pbPlay.Value = (int)vVideoLan.input.Time;
}

Y así es como lo he solucionado, si alguien sabe como obtener la duración del vídeo de otra forma o como solucionar el problema del desfase de la duración puede dejar un comentario.