2009-04-20 3 views
4

Можно создать дубликат:
How can I programmatically determine if my workstation is locked?Detect, если рабочий стол заблокирован

Что является лучшим способом, чтобы определить, если рабочий стол заблокирован для текущего пользователя? Я посмотрел в MSDN и не смог найти какие-либо вызовы API, чтобы обнаружить это. Я что-то пропустил, или нет простого звонка, который я могу использовать?

ответ

0

Бывшие ответы неверны (изменения состояния)
Используйте WTS API (islocked)
Он используется внутри Windows. Всегда Посмотреть на Win32 group для Windows Internal (MS)

13

Ответ зависит от того, хотите ли вы знать, если рабочий стол заблокирован Теперь, или если вы хотите получать уведомления, когда рабочий стол блокируется (и, по-видимому, разблокирован). Это также зависит от того, как вы планируете получать указанные уведомления.

  • Если вы действительно хотите тест одноразовым, то ответ here использует OpenDesktop() и SwitchDesktop(), чтобы открыть дескриптор рабочего стола по умолчанию и активировать его - если это не удается, то это хороший знак, что рабочий стол заблокирован прямо сейчас.

  • Если вы хотите получать уведомления о блокировке/разблокировке, и у вас есть приложение в режиме пользователя с окном и насосом сообщений, вам необходимо позвонить WTSRegisterSessionNotification() и поймать сообщение WM_WTSSESSION_CHANGE.

  • Если вы хотите уведомления, и вы работаете в качестве службы Windows, то вы можете зарегистрироваться на событие изменения сеанса, вызвав SetServiceStatus() и добавление SERVICE_ACCEPT_SESSIONCHANGE к dwControlsAccepted в вашей структуре статуса. Затем вы получите обратные вызовы к своему собственному сервисному управлению HandlerEx() с dwControl, установленным на SERVICE_CONTROL_SESSIONCHANGE.

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