2012-01-30 12 views
12

Eventuali duplicati:
How can I programmatically determine if my workstation is locked?
Checking for workstation lock/unlock change with c#determinare quando un serrature utente/sblocca il loro PC

Vorrei determinare quando un Windows (XP o 7) macchina è bloccata e sbloccato.

Vorrei creare un'app di registrazione attività scheda attività e tempi di pre-riempimento in, con pranzo, pause, ecc, sarebbe molto utile.

È possibile rilevare un evento che si attiva quando il sistema operativo Windows è bloccato e sbloccato?

+3

L'ho già fatto, ma sembra male. – Jodrell

+2

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

+6

Ti dispiacerebbe farmi sapere dove lavori così posso aggiungerlo alla mia lista nera . –

risposta

0

È necessario ottenere un cambiamento di notifica della sessione, avviare, cercando on PInvoke here

Come lo stato commenti, qualcuno dovrebbe prendere in considerazione le implicazioni di business di questo utilizzo di questa API.

Una volta che gli utenti sono a conoscenza di questo monitoraggio, potrebbero essere tentati di lasciare sessioni sbloccate o persino condividere password che risulterebbero controproducenti.

+1

È per un'app che ME può usare per ricordarmi quando ero dentro, lasciato la mia scrivania, ecc., Perché quando sto compilando i timesheet, non è per 'la compagnia' – cometbill

14

Prova questa (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

Questo è in realtà un modo molto più semplice di farlo (e come l'ho fatto prima) +1 – Jodrell

+0

* (scusa, risposta errata edita) * – RedFilter

+2

hai veramente bisogno di sganciare il gestore di eventi quando l'applicazione termina? Non accadrà automaticamente? E come lo fai? – mcmillab

8

Ecco un esempio di lavoro. Eseguire questo, bloccare e sbloccare la workstation, e osservare l'output:

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()); 
     } 

    } 
} 

Si consiglia inoltre di rilevare quando lo screensaver è in esecuzione.

Problemi correlati