2012-09-06 11 views
5

Quiero rastrear el evento de desbloqueo de Windows en una aplicación de Windows. ¿Cómo se hace? ¿Cuál es el evento utilizado para eso? ¿Debo importar cualquier espacio de nombres para eso?¿Cómo obtener el evento de desbloqueo de Windows en la aplicación C# windows?

Mientras un usuario desbloquea las ventanas, la aplicación necesita realizar algunas tareas.

+0

Posible duplicado de: http://stackoverflow.com/questions/603484/checking-for-workstation-lock-unlock-change-with-c-sharp o esta http://stackoverflow.com/questions/44980/how-can-i-programmatically-determine-if-my-workstation-is-locked –

+0

Las respuestas en ese enlace no estaban a la altura de la marca. :( –

+0

Agregué un enlace más - parece que hay muchas "instancias" de este tipo de preguntas en StackOverflow. Sin embargo, publiqué una de ellas como respuesta, ya que incluía código de ejemplo que podría serle útil. –

Respuesta

10

Tal como se publicó en esta respuesta de StackOverflow: https://stackoverflow.com/a/604042/700926, debería echar un vistazo al SystemEvents.SessionSwitch Event.

El código de muestra se puede encontrar en la respuesta remitida también.

Acabo de tomar el código que se muestra en el referido StackOverflow answer para un giro y parece funcionar en Windows 8 RTM con .NET framework 4.5.

Para su referencia, he incluido el código de muestra completo de la aplicación de consola que acabo de ensamblar.

using System; 
using Microsoft.Win32; 

// Based on: https://stackoverflow.com/a/604042/700926 
namespace WinLockMonitor 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch); 
      Console.ReadLine(); 
     } 

     static void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e) 
     { 
      if (e.Reason == SessionSwitchReason.SessionLock) 
      { 
       //I left my desk 
       Console.WriteLine("I left my desk"); 
      } 
      else if (e.Reason == SessionSwitchReason.SessionUnlock) 
      { 
       //I returned to my desk 
       Console.WriteLine("I returned to my desk"); 
      } 
     } 
    } 
} 
+0

Estoy usando una aplicación de Windows. ¿Dónde debo agregar el 'Microsoft.Win32.SystemEvents.SessionSwitch + = new Microsoft.Win32.SessionSwitchEventHandler (SystemEvents_SessionSwitch);' –

+0

Este funcionó bien. He agregado el código anterior dentro del evento de inicialización del formulario. –

Cuestiones relacionadas