2009-03-16 4 views
19

Preferirei una risposta in C#, .Net 3.5 usando WPF (anche Windows Form ok)Come posso rilevare un comando Blocca questo computer da un'applicazione WPF?

Ho un'applicazione che è essenzialmente una finestra della barra degli strumenti o icona del vassoio. È necessario rilevare se un utente blocca la propria workstation e si allontana per aggiornare lo stato della persona in un sistema centralizzato.

Sono in grado di rilevare un interruttore di sessione o un logout abbastanza facilmente, utilizzando SystemEvents, ma non posso per la vita di me capire come rilevare o ricevere un evento su Blocco.

Grazie per qualsiasi assistenza.

+0

Vedi http://stackoverflow.com/questions/44980/how-can-i-programmatically-determine-if-my-workstation-is-locked – Abhijit

risposta

43

Quando si gestisce l'evento Microsoft.Win32.SystemEvents.SessionSwitch (che suona come si sta già facendo per rilevare il logout), controllare per vedere se la Reason è SessionSwitchReason.SessionLock:

using Microsoft.Win32; 
// ... 
// Somewhere in your startup, add your event handler: 
    SystemEvents.SessionSwitch += 
     new SessionSwitchEventHandler(SystemEvents_SessionSwitch); 
// ... 

void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) 
{ 
    switch(e.Reason) 
    { 
     // ... 
     case SessionSwitchReason.SessionLock: 
      // Do whatever you need to do for a lock 
      // ... 
     break; 
     case SessionSwitchReason.SessionUnlock: 
      // Do whatever you need to do for an unlock 
      // ... 
     break; 
     // ... 
    } 
} 
+0

+1: questo è esattamente quello che stavo cercando anche io, grazie :) –

+0

+1. Per me va bene. – Muthukkumaran

+0

+ 1 Thx per la risposta chiara! – icaptan

2

È necessario p/invocare WTSRegisterSessionNotification. Il codice di esempio è here

+2

C'è un motivo per farlo invece di gestire SystemEvents.SessionSwitch? –

+3

Solo se non si è a conoscenza di SessionSwitch. Lo ero fino ad ora –

+0

@BC: OK; non ero sicuro se fosse dovuto a una limitazione WPF o qualcosa del genere ... –