Я искал ответ на этот вопрос по всему Интернету, но на него, похоже, не было прямого ответа, поэтому я подумал, что спрошу.
Сценарий: я хочу сделать скриншот того, что в данный момент отображается на экране компьютера. Если это экран входа в Windows, я хочу, чтобы это было так. Если это рабочий стол активного пользователя, я хочу быть таким. Если пользователь повышает уровень своего приложения и появляется приглашение UAC, я хочу, чтобы это было так.
Что касается чтения, проб и ошибок, моя текущая настройка выглядит следующим образом:
- Программа работает как служба Windows
- Получает токен активного пользователя
- Запускает CreateProcessAsUser с токеном пользователя для создания другого собственного экземпляра
- Делает снимок экрана и передает его обратно по каналам.
Прямо сейчас это отлично работает для вошедшего в систему пользователя, за исключением того, что при включении приглашения UAC снимок экрана становится черным.
Кроме того, этот метод, очевидно, не будет работать для получения экрана входа в систему.
По сути, мне интересно, как именно TeamViewer добивается такого рода достижений? Он может без проблем переключаться между экраном входа в систему и сеансом пользователя, а также захватывает запросы UAC. Мне очень любопытно, как это достигается.
Спасибо всем!