Как определить, заблокирован текущий сеанс Windows или нет? - PullRequest
6 голосов
/ 19 июня 2009

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

ОБНОВЛЕНИЕ: приложение не может прослушивать события SessionNotification. Приложение может быть запущено в любое время и прекращает работу после его завершения.

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 июня 2009

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

0 голосов
/ 19 июня 2009

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

0 голосов
/ 19 июня 2009

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

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

...