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");
}
}
}
}
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 –
Odpowiedzi w tym linku nie były do znaku. :( –
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ć. –