Hacer invisible un formulario

Published 140 weeks, 6 days ago
Wed Jan 25 2006
Otro truco interesante, que me tuvo un poco martirizado hasta que lo encontré, es el siguiente. Imaginaos que estamos desarrollando una aplicación que va a residir en el área de notificación de Windows. Hay multitud de tutoriales en Internet al respecto, así que no profundizaré en ello. Pero un pequeño detalle me traía por la calle de la amargura: cuando hacía ALT+TAB, en la lista de ventanas disponibles aparecía la de mi aplicación; a pesar de ser invisible. Y yo sólo quería que la aplicación apareciera como visible,... bueno, pues cuando realmente fuera visible, si me perdonáis la perogrullada.

Tras mucho navegar, encontré lo siguiente:
//Impide que la aplicación sea visible al hacer ALT+TAB
private const int GWL_EXSTYLE (-20);
private const int 
WS_EX_TOOLWINDOW 0x80;
private const int 
WS_EX_APPWINDOW 0x40000;

[DllImport("user32", CharSet=CharSet.Auto)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

[DllImport("user32", CharSet=CharSet.Auto)]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int
    
dwNewLong);

private void 
frmMain_Activated(object sender, EventArgs e)
{
    SetWindowLong(
this.Handle, GWL_EXSTYLE, (GetWindowLong(this.Handle,
        GWL_EXSTYLE) | WS_EX_TOOLWINDOW) & ~WS_EX_APPWINDOW)
;
}

Colorized by: CarlosAg.CodeColorizer

Como podéis ver, este código API de Win32 lo único que hace es aplicar un estilo determinado a la ventana actual. Llamar a la API en el evento Activated del form asegura que la aplicación será invisible desde un buen principio. Por cierto, que esto está probado con una aplicación que tiene dos formularios, y el inicial sólo sirve para contener el menú contextual y el icono de la bandeja de notificación, por lo que nunca será necesario que sea visible.

La aplicación en concreto es una pequeña utilidad que sirve para rotar periódicamente el fondo de escritorio de Windows, y alguna otra cosilla hace, y que lleva rondando por mis equipos un montón de tiempo. Está casi terminada, al menos la versión 1.0, pero a ver cuándo tengo tiempo de adecentarla para poder enseñarla.
Comments are closed.