Мне удалось получить все свои сеансы с помощью WTSEnumerateSessions, но я не могу понять, как заблокировать / разблокировать их статус и, если они разблокированы, получить время с момента последнего ввода. Есть какие-нибудь советы / помощь?
Чтобы получить состояние блокировки сеанса:
В Windows 7 и более поздних версиях вы можете использовать WTSQuerySessionInformation() с параметром WTSInfoClass, установленным на WTSSessionInfoEx.
WTSQuerySessionInformation()
WTSInfoClass
WTSSessionInfoEx
В старых системах вам нужно будет отслеживать события блокировки / разблокировки в реальном времени, используя WTSRegisterSessionNotification() для получать уведомления WM_WTSSESSION_CHANGE, проверяя его wParam на наличие WTS_SESSION_LOCK и WTS_SESSION_UNLOCK кодов состояния.
WTSRegisterSessionNotification()
WM_WTSSESSION_CHANGE
wParam
WTS_SESSION_LOCK
WTS_SESSION_UNLOCK
Чтобы получить время последнего ввода сеанса:
В Vista SP1 и более поздних версиях вы можете использовать WTSQuerySessionInformation() с параметром WTSInfoClass, установленным на WTSSessionInfo.
WTSSessionInfo
В более старых системах вам нужно будет использовать CreateProcessAsUser() для запуска вспомогательного процесса внутри целевого сеанса, который затем может вызывать GetLastInputInfo() и передать эту информацию в основное приложение.
CreateProcessAsUser()
GetLastInputInfo()