SystemEvents и выход из спящего режима

Представьте, что я создаю приложение, которое измеряет, как долго определенный пользователь находится на компьютере (фактическое приложение, которое я пишу, отличается, но это не имеет значения).

Мне нужно отслеживать, когда пользователь входит в систему, выходит из системы, когда он приостанавливает работу компьютера (выбор режима ожидания в меню «Выключение») и когда компьютер выходит из спящего режима.

Я использую SystemEvents (в частности, PowerModeChanged и SessionSwitch events) для этого, и в основном это работает, за одним исключением:

Когда компьютер приостановлен, событие PowerModeChanged корректно возникает с режимом Suspend.

Когда компьютер возобновляет работу, PowerModeChanged поднимается с режимом Resume. Все идет нормально.

Сразу после этого возникает событие SessionSwitch с причиной SessionLock. Но когда я в конце концов захожу после возобновления, SessionUnlock нет.

Это происходит в Windows XP, и мне нужно, чтобы это работало правильно в XP, Vista и 7.

Есть ли способ получить этот анлок?


person svick    schedule 10.08.2011    source источник
comment
Нет, в Windows нет задокументированного способа определить, что безопасный рабочий стол становится неактивным. Вы должны провести опрос.   -  person Hans Passant    schedule 10.08.2011
comment
Если вы имеете в виду определение того, находится ли пользователь за компьютером (и двигает ли мышь, нажимает ли клавиши), меня это не волнует, просто вошел ли он в данный момент, компьютер не приостановлен и сеанс активен.   -  person svick    schedule 10.08.2011


Ответы (1)


Оказывается, в одном из моих обработчиков было неперехваченное исключение. По-видимому, это остановило дальнейшие события.

person svick    schedule 10.08.2011
comment
Я думал об этом, но я думаю, что возможно, кто-то может столкнуться с той же проблемой, поэтому ответ здесь может быть полезен. - person svick; 10.08.2011
comment
@ian: свик прав. Это полезный вопрос, который не следует удалять. - person SLaks; 10.08.2011