Ответ зависит от того, хотите ли вы знать, если рабочий стол заблокирован Теперь, или если вы хотите получать уведомления, когда рабочий стол блокируется (и, по-видимому, разблокирован). Это также зависит от того, как вы планируете получать указанные уведомления.
Если вы действительно хотите тест одноразовым, то ответ here использует OpenDesktop()
и SwitchDesktop()
, чтобы открыть дескриптор рабочего стола по умолчанию и активировать его - если это не удается, то это хороший знак, что рабочий стол заблокирован прямо сейчас.
Если вы хотите получать уведомления о блокировке/разблокировке, и у вас есть приложение в режиме пользователя с окном и насосом сообщений, вам необходимо позвонить WTSRegisterSessionNotification()
и поймать сообщение WM_WTSSESSION_CHANGE
.
Если вы хотите уведомления, и вы работаете в качестве службы Windows, то вы можете зарегистрироваться на событие изменения сеанса, вызвав SetServiceStatus()
и добавление SERVICE_ACCEPT_SESSIONCHANGE
к dwControlsAccepted
в вашей структуре статуса. Затем вы получите обратные вызовы к своему собственному сервисному управлению HandlerEx()
с dwControl
, установленным на SERVICE_CONTROL_SESSIONCHANGE
.