2009-03-16 13 views
19

सी # में एक जवाब पसंद करेंगे, .NET 3.5 का उपयोग WPF (विंडोज फॉर्म भी ठीक है)मैं एक WPF अनुप्रयोग से लॉक इस कंप्यूटर कमांड का पता कैसे लगा सकता हूं?

मेरे पास एक ऐसा एप्लिकेशन है जो अनिवार्य रूप से टूलबार विंडो या ट्रे आइकन है। यह पता लगाने की जरूरत है कि कोई उपयोगकर्ता अपने वर्कस्टेशन को लॉक करता है और केंद्रीकृत सिस्टम में व्यक्ति की स्थिति को अपडेट करने के लिए दूर चला जाता है।

मैं सिस्टम एवेन्ट्स का उपयोग करके आसानी से एक सत्र स्विच या लॉगआउट का पता लगा सकता हूं, लेकिन मैं अपने जीवन के लिए लॉक पर किसी ईवेंट को पहचानने या प्राप्त करने का तरीका नहीं समझ सकता।

किसी भी सहायता के लिए धन्यवाद।

+0

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

उत्तर

43

जब आप Microsoft.Win32.SystemEvents.SessionSwitch घटना (जो यह है कि आप पहले लॉगआउट पता लगाने के लिए कर रहे हैं लगता है) संभाल, यह जांच लें कि ReasonSessionSwitchReason.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: यह वही है जो मैं भी ढूंढ रहा था, धन्यवाद :) –

+0

+1। मेरे लिये कार्य करता है। स्पष्ट उत्तर के लिए – Muthukkumaran

+0

+ 1 Thx! – icaptan

2

आपको WTSRegisterSessionNotification को पी/आमंत्रित करने की आवश्यकता है। नमूना कोड here

+2

क्या SystemEvents.SessionSwitch को संभालने के बजाय ऐसा करने का कोई कारण है? –

+3

केवल तभी जब आप सत्र स्विच से अनजान हैं। मैं अब तक था। –

+0

@ बीबीसी: ठीक है; यह सुनिश्चित नहीं था कि यह एक डब्ल्यूपीएफ सीमा या कुछ के कारण था ... –

संबंधित मुद्दे