Visual C ++ 2008
Как установить, находится ли интерактивный пользователь на заблокированном рабочем столе (Windows-ключ L) или на экране выключения (Vista или 7), ожидая закрытия программ во время выхода из системы.
HDESK hd = OpenInputDesktop (0, false, READ_CONTROL);
Это прекрасно работает для пользовательского приложения на рабочем столе по умолчанию, но завершается ошибкой с кодом 5 при работе на рабочих столах Locked или Shutdown из-за того, что, как я понимаю, у пользователя нет прав на открытие объекта защищенного рабочего стола.
Вызов этого из службы, работающей под учетной записью SYSTEM, возвращает ошибку 1 (недопустимая функция). Я считаю, что Сервис в любом случае находится в неправильном сеансе (сеанс 0) и не может определить интерактивный рабочий стол для любого другого сеанса.
У меня есть приложение, работающее под текущим интерактивным пользователем, а также запущенная системная служба, поэтому код может быть выполнен любым из них.
Должен ли я попытаться перечислить все сеансы, оконные станции и рабочие столы?
Даже тогда, как мне определить текущий интерактивный рабочий стол, если я могу только вызвать OpenInputDesktop из службы SYSTEM в сеансе 0?