Como detectar eventos de bloqueio, desbloqueio, logon e logoff da sessão do Windows em um app C#
Use SystemEvents.SessionSwitch em um app desktop ou de console, sobrescreva OnSessionChange em um serviço do Windows ou intercepte WM_WTSSESSION_CHANGE você mesmo. Cobre código .NET 10 para as três abordagens, a thread oculta '.NET System Events', por que serviços veem o logon e apps desktop não, notificações fora de ordem e como consultar o estado atual de bloqueio com WTSQuerySessionInformation.