2012-01-30 14 views
12

Duplicar posible:
How can I programmatically determine if my workstation is locked?
Checking for workstation lock/unlock change with c#Determinar cuando un usuario bloquea/desbloquea su PC

me gustaría para determinar cuándo un equipo con Windows (XP o 7) de la máquina está bloqueada y desbloqueado

Me gustaría crear una aplicación de registro de actividad de hojas de horas, y los tiempos de pre-llenado en, almuerzo, descansos, etc. serían muy útiles.

¿Es posible detectar un evento que se dispara cuando el sistema operativo de Windows está bloqueado y desbloqueado?

+3

He hecho esto antes, pero esto suena malvado. – Jodrell

+2

mira este: http://www.codeproject.com/Articles/13774/Detecting-Windows-Workstation-Locked-Unlocked-in-N –

+6

¿Te importaría decirme dónde trabajas para poder agregarlo a mi lista negra? . –

Respuesta

0

Es necesario obtener una notificación de cambio de la sesión, a empezar por mirar on PInvoke here

A medida que el estado de los comentarios, alguien debería considerar las implicaciones empresariales de este uso de esta API.

Una vez que los usuarios conocen este monitoreo, podrían tener la tentación de dejar las sesiones desbloqueadas o incluso compartir contraseñas que serían contraproducentes.

+1

Es una aplicación que ME debe usar para ayudarme a recordar cuando estaba, salí de mi escritorio, etc., porque cuando llene hojas de horas, no es para "la compañía" – cometbill

14

probar este (found here):

SystemEvents.SessionSwitch += 
    new SessionSwitchEventHandler(SystemEvents_SessionSwitch); 

// unhook static eventhandler when application terminates! 

//Handle event 
static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) 
{ 
    Console.WriteLine(e.Reason.ToString()); 
} 
+0

Esta es una forma mucho más simple de hacerlo (y cómo lo hice antes) +1 – Jodrell

+0

* (lo siento, respuesta incorrecta editada) * – RedFilter

+2

¿realmente necesita desenganchar el manejador de eventos cuando finaliza la aplicación? ¿No sucederá automáticamente? ¿Y cómo lo haces? – mcmillab

8

Aquí es un ejemplo de trabajo. Ejecutar este, bloquear y desbloquear la estación de trabajo, y observar la salida:

using System; 
using Microsoft.Win32; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     private static SessionSwitchEventHandler sseh; 

     static void Main(string[] args) 
     { 
      sseh = new SessionSwitchEventHandler(SystemEvents_SessionSwitch); 
      SystemEvents.SessionSwitch += sseh; 
      while(true) {} 
     } 

     static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) 
     { 
      Console.WriteLine(e.Reason.ToString()); 
     } 

    } 
} 

También puede detectar cuando el salvapantallas está corriendo.

Cuestiones relacionadas