| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Получение снимка экрана в сервисе |
| Автор: nda 15.2.2016, 15:23 | ||||
| Добрый день. Народ подскажите пожалуйста. Пишу сервис для винды, суть его очень просто через определенное время делает снимок экрана. Но проблема в следующем когда запускаю сервис мне вместо снимков экрана сохраняется белый фон, а когда тот же код запускаю с переложения все нормально. Вот код
и еще вот такой использовал
Подскажите как сделать так чтобы с сервиса (службы) тоже снимок экрана делался нормально. |
| Автор: kami 15.2.2016, 22:01 |
| если коротко - то никак. А теперь немножко подробнее: у каждого пользователя в Windows - своя сессия, свой рабочий стол, свой экран. Это же относится и к сервисам - у них свой рабочий стол под учетной записью LOCAL SYSTEM (или другой - в зависимости от типа логина). Времена, когда сервис мог подключиться к активной сессии пользователя минули с окончанием эры Windows XP. Начиная с Vista разделение жесткое, без права на амнистию. Разные сессии не могут получить доступ к объектам друг друга. Это относится в том числе к Inter-process communications - самый распространенный механизм (Send и PostMessage) не работает между сессиями. Остаются другие способы (MMF, NamedPipes, TCP/IP...), но у них нужно явно указывать права доступа. К чему я это все? Непосредственно из сервиса сделать снимок активного рабочего стола нельзя - у него другая сессия. Для того, чтобы совершить подобное сервису нужно: 1. Запустить новый "обычный" процесс от имени активной учетки. 2. Соединиться с ним через любой вид межпроцессного взаимодействия, позволяющий работать из разных сессий 3. Отправить команду в приложение "дай мне снимок экрана" и получить от нее данные. На форуме есть темы, как сделать это всё. Емнип, в основном - в разделе WinAPI. Поищите... |
| Автор: nda 25.2.2016, 17:21 |
| спасибо за помощь kami. |