2009-03-16 6 views
19

Je préfèrerais une réponse en C#, .Net 3.5 en utilisant WPF (Windows Forms aussi correct)Comment puis-je détecter une commande Verrouiller cet ordinateur à partir d'une application WPF?

J'ai une application qui est essentiellement une fenêtre de barre d'outils ou une icône de barre. Il doit détecter si un utilisateur verrouille son poste de travail et s'éloigne afin de mettre à jour son statut dans un système centralisé.

Je peux détecter un changement de session ou une déconnexion assez facilement, en utilisant SystemEvents, mais je ne peux pas pour la vie de moi comprendre comment détecter ou recevoir un événement sur Lock.

Merci pour toute aide.

+0

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

Répondre

43

Lorsque vous gérez l'événement Microsoft.Win32.SystemEvents.SessionSwitch (ce qui sonne comme vous faites déjà pour détecter la déconnexion), vérifiez si le Reason est 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: C'est exactement ce que je cherchais aussi, merci :) –

+0

+1. Travaille pour moi. – Muthukkumaran

+0

+ 1 Thx pour la réponse claire! – icaptan

2

Vous devez appeler/appeler WTSRegisterSessionNotification. L'exemple de code est here

+2

Y a-t-il une raison de le faire au lieu de gérer SystemEvents.SessionSwitch? –

+3

Seulement si vous n'êtes pas au courant de SessionSwitch. J'étais jusqu'à maintenant. –

+0

@BC: D'accord; n'était pas sûr si c'était dû à une limitation de WPF ou quelque chose ... –

Questions connexes