2012-09-06 9 views
5

Chcę śledzić zdarzenie odblokowania okna w aplikacji systemu Windows. Jak to jest zrobione? Jakie jest to wydarzenie? Czy muszę zaimportować do tego przestrzeń nazw?Jak uzyskać zdarzenie odblokowania okna w aplikacji windows C#?

Podczas gdy użytkownik odblokowuje okna, aplikacja musi wykonać pewne czynności.

+0

Możliwy duplikat: http://stackoverflow.com/questions/603484/checking-for-workstation-lock-unlock-change-with-c-sharp czy to http://stackoverflow.com/questions/44980/how-can-i-programowo-określ-jeśli-moja-stacja robocza-jest-zablokowana –

+0

Odpowiedzi w tym linku nie były do ​​znaku. :( –

+0

Dodałem jeszcze jeden link - wydaje się, że w "StackOverflow" pojawiło się wiele "instancji" tego typu pytań, jednak wysłałem jedną z nich jako odpowiedź, ponieważ zawiera przykładowy kod, który może ci się przydać. –

Odpowiedz

10

Zgodnie z tą odpowiedzią StackOverflow: https://stackoverflow.com/a/604042/700926 powinieneś rzucić okiem na SystemEvents.SessionSwitch Event.

Przykładowy kod można również znaleźć w odpowiedzi.

Po prostu wziąłem kod pokazany w odnośnym StackOverflow answer dla spin i wydaje się, że działa na Windows 8 RTM z .NET framework 4.5.

W celach informacyjnych zamieściłem pełny kod przykładowy aplikacji konsoli, którą właśnie zmontowałem.

using System; 
using Microsoft.Win32; 

// Based on: https://stackoverflow.com/a/604042/700926 
namespace WinLockMonitor 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch); 
      Console.ReadLine(); 
     } 

     static void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e) 
     { 
      if (e.Reason == SessionSwitchReason.SessionLock) 
      { 
       //I left my desk 
       Console.WriteLine("I left my desk"); 
      } 
      else if (e.Reason == SessionSwitchReason.SessionUnlock) 
      { 
       //I returned to my desk 
       Console.WriteLine("I returned to my desk"); 
      } 
     } 
    } 
} 
+0

aplikacja Windows Gdzie muszę dodać 'Microsoft.Win32.SystemEvents.SessionSwitch + = new Microsoft.Win32.SessionSwitchEventHandler (SystemEvents_SessionSwitch);' –

+0

Ten działał bez zarzutu Dodałem powyższy kod wewnątrz zdarzenia inicjalizacji formularza. –

Powiązane problemy