2009-06-19 4 views
6

У меня есть приложение, которое запускается каждый час на компьютере с Windows XP. Для правильной работы этого приложения требуется разблокировать текущий сеанс. Поэтому мне было интересно, есть ли способ узнать, заблокирован ли текущий сеанс Windows или нет с C# и .NET 3.5.Как определить, заблокирован ли текущий сеанс Windows?

UPDATE: приложение не может прослушивать события SessionNotification. Приложение может быть запущено в любое время и завершено по завершении.

Спасибо!

+0

Что он делает, если он не может работать, когда сеанс заблокирован? – jmucchiello

ответ

1

Они непроверены мной, но выглядят интересными. Я бы дал им тест, но на данный момент моя Visual Studio выглядит менее чем счастливой.

+0

Ссылка eggheadcafe - 404'd – hometoast

+0

Ссылка на кеш составляет 404'd – jnm2

0

Я однажды использовал функцию GetForegroundWindow(), чтобы определить, была ли заставка экрана запущена. Если возвращаемое значение было NULL, то активна экранная заставка (или, предположительно, заблокированная рабочая станция). Обратите внимание, что это было в первые дни Windows NT, не документировано для этого, и нет никакой гарантии, что он все равно будет делать то же самое сегодня.

Рассматривая ссылку на API Win32, вы можете использовать что-то вроде OpenInputDesktop(), чтобы получить HDESK текущего рабочего стола. Если вы не можете получить дескриптор рабочего стола или если он отличается от рабочего стола вашего потока, ваше приложение работает на рабочем столе, который неактивен (а рабочая станция, вероятно, либо находится в состоянии экранной заставки, либо заблокирована). Нет гарантий того, что этот метод будет работать, но, возможно, стоит изучить его.

0

Я ответил на аналогичный вопрос here. Я думаю, что методы 2 & 3 могут быть улучшены, чтобы обнаружить заблокированное состояние.

Смежные вопросы