Microsoft MVP

Email y Rss

email rss

Klout

Seguidores en facebook

Timeline de mi Twitter

Tienes preguntas?

Ideas de un Conejo
Más allá de los sistemas de información: (C#)=> videojuegos, soluciones a problemas interesantes y Sistemas Operativos
XNA
C#
Sistemas Operativos
Varios
Windows Phone
WinRT
XAML
Azure
HTML 5
Acerca de

C# – Recibir notificaciones cuando hayan cambios de sesión parte 2 – Windows Forms

June 2nd, 2011 by JuanK

Follow @JuanKRuiz

Artículos de este tema:

  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 1
  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 2 – Windows Forms
  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 3 – WPF

*Realmente son 6 articulos si contamos los mini post a los que se hace referencia

En mi artículo anterior enseñe como crear una librería para interceptar las notificaciones generadas en el sistema cuando se hacen cambios de sesión, en este artículo enseñare como hacer uso de ese componente en una aplicación para Windows Forms.

LETS CODE!

Divide y vencerás!, mi principio favorito. Seguiremos estos tres pasos:

  1. Registrar la ventana para recibir notificaciones
  2. Modificar el comportamiento del WndProc
  3. Des registrar la ventana para dejar de recibir notificaciones

He creado una aplicacion Windows Forms sencilla con un ListBox que se irá llenando a medida que lleguen notificaciones de cambios en las sesiones.

Registrar la ventana para recibir notificaciones

Para comenzar recibiendo notificaciones lo primero que debemos hacer es registrar nuestra Ventana, la Form, utilizando la API, para ello utilizamos la libreria que cree en C# – Recibir notificaciones cuando hayan cambios de sesión parte 1 simplemente usamos el evento load del form.


private void Form1_Load(object sender, EventArgs e)
{
    //Registramos la forma para recibir notificaciones
    W32HandleSessionChanges.WTSRegisterSessionNotification(this.Handle, NotifyType.NOTIFY_FOR_ALL_SESSIONS);
}

Con esto nuestra ventana ya comienza a recibir notificaciones de cambios en las sesiones.

Modificar el comportamiento del WndProc

Aunque ya estamos recibiendo las notificaciones lo cierto es que no estamos haciendo nada con ellas, para interceptarlas y comenzar a hacer algo es necesario hacerle override al WndProc del form y capturar el mensaje de notificación que se envía desde el sistema de ventanas.

Una vez interceptado debemos revisar la propiedad wParam del mensaje ya que esta nos da detalles adicionales acerca del evento que se ha generado. Para efectos de este ejemplo simplemente convierto ese valor a su equivalente en los enum de la librería creada en el articulo previo, y adiciono esa cadena al listbox para que básicamente nos vaya mostrando los mensajes que van llegando.

En este caso paso como parámetro NOTIFY_FOR_ALL_SESSIONS para recibir notificaciones de cambios en todas las sesiones no solo en la actual

protected override void WndProc(ref Message m)
{
    //Verificamos cuando el mensaje recibido sea el de cambios en la sesión
    if (m.Msg == W32HandleSessionChanges.WM_WTSSESSION_CHANGE)
    {
        //convertimos el valor de wParam a su equivalente en nombre del enum
        var name = Enum.GetName(typeof(SessionNotificationMsg), (SessionNotificationMsg)m.WParam);
        this.listBox1.Items.Add(name);
    }
    base.WndProc(ref m);
}

Des registrar la ventana para dejar de recibir notificaciones

Esta es la parte más fácil, antes de cerrar la ventana la des registramos:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    //Des Registramos la forma para no recibir notificaciones
    W32HandleSessionChanges.WTSUnRegisterSessionNotification(this.Handle);
}

El resultado

Ejecutamos el programa

SNAGHTML582d4b8

 

Bloquemos nuestra sesión de Windows, volvemos a ingresar y…

SNAGHTML583c222

 

Perfecto!! Guiño

En un próximo articulo veremos como hacer lo mismo con WPF.

Print Friendly

Follow @JuanKRuiz

  • 4 Comentarios »
  • Publicado en la categoría 'C#, Windows'

4 comentarios to “C# – Recibir notificaciones cuando hayan cambios de sesión parte 2 – Windows Forms ”


  • C# - Recibir notificaciones cuando hayan cambios de sesión parte 3 - WPF | Ideas de un Conejo Says:
    June 2nd, 2011 at 5:20 pm  

    [...] Windows forms esta tarea es bastante sencilla e intuitiva, pero este no es el caso de WPF dadas las propias [...]

  • C# - Recibir notificaciones cuando hayan cambios de sesión parte 1 | Ideas de un Conejo Says:
    June 3rd, 2011 at 12:37 am  

    [...] C# – Recibir notificaciones cuando hayan cambios de sesión parte 2 – Windows Form… [...]

  • Ideas de un Conejo Says:
    June 10th, 2011 at 12:08 pm  

    [...] C# – Recibir notificaciones cuando hayan cambios de sesión parte 2 – Windows Form… [...]

  • ChrisG Says:
    June 22nd, 2011 at 9:01 am  

    Hello,

    Thanks for the great tutorial. Can you give an example of a service that receives session change notifications? I couldn’t figure out how to get the “handle ” when not using forms – any help would be appreciated.

    Thank you,

    Chris G.

Deja un comentario

Redes Sociales

Follow @JuanKRuiz
Answer Questions

Busca en el blog

Artículos Relacionados

  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 1
  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 3 – WPF
  • C# – Como modificar el comportamiento del botón minimizar, maximizar, etc.
  • C# – Cuando la precisin que da el StopWatch no es suficiente…
  • El extraño caso de la ventana sin borde que no se deja maximizar ni minimizar
  • C# – Cmo modificar la transparencia en la ventana de otro proceso?
  • C# – usar el WndProc en una Ventana WPF
  • Artículos Relacionados

  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 1
  • C# – Recibir notificaciones cuando hayan cambios de sesión parte 3 – WPF
  • C# – Como modificar el comportamiento del botón minimizar, maximizar, etc.
  • C# – Cuando la precisin que da el StopWatch no es suficiente…
  • El extraño caso de la ventana sin borde que no se deja maximizar ni minimizar
  • C# – Cmo modificar la transparencia en la ventana de otro proceso?
  • C# – usar el WndProc en una Ventana WPF
  • Nube de Temas

    API - Azure - C# - codigo - Forms - IE - IE9 - Image - imagenes - IT - Microsoft - MVP - Pinned - PowerShell - Proceso - rendimiento - RSS - sistema - Sistemas Operativos - Site - Visual - WCF - Windows - Windows 8 - Windows Store - WinRT - WndProc - WPF - XAML - XNA

    Blogs recomendados

  • VBCodigoPocketPC Espacio para tratar temas de programacion para dispositivos moviles, Pocket PC, Compact Framework, Embbeded Visual Basic, Visual Basic.NET , C# (C Sharp)
  • Róbinson Moscoso Estaré publicando acá cosas sobre tecnologia .NET, situacioines cotidianas de las que voy aprendiendo… sirve como extensión de memoria.
  • .Net C# Blog de Nelsón Venegas
  • Warnov Microsoft Developer Evangelist
  • IT LIfe Blog de mi Hermano que esta en el lado claro: IT
  • Sorey Garcia Una chica del común con la firme intención de no serlo
  • Black Byte videojuegos, modelado y animación 3d
  • Road to IT World Cosas interesantes de IT
  • Marcela Chitiva Un poco de esto… un poco de aquello
  • Surviving the Nigth El mejor blog para aquellos que nos gustan los “internals”
  • Meta

    1. Log in
    2. WordPress

    Ideas de un Conejo is powered by Wordpress. Theme designed by Juan Carlos Ruiz.