Служба Windows не может получить скриншот в Windows 7 - PullRequest
2 голосов
/ 17 сентября 2011

У меня есть служба Windows, которая получает скриншоты. Но это создает только черные экраны. Я знаю, что это происходит из-за изоляции сессии 0. Я искал в интернете и не смог найти ни одного одобренного решения этой проблемы, любые рабочие идеи будут действительно хорошими.

1 - Есть ли способ изменить сеанс службы Windows и получить экран рабочего стола сеанса другого пользователя, например сеанс 1, сеанс 2?

2- Есть ли способ запустить консольное приложение, которое выполняется в другом сеансе, кроме сеанса 0, из службы Windows?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

служба Windows предназначена для запуска также в том случае, если нет подключенных пользователей, она работает как серверный процесс, всегда включенный и прослушивающий, или включающий и выполняющий что-то, или бездействующий.

Я думаю, что вам нужноклиентское приложение, которое выполняется внутри сеанса каждого зарегистрированного пользователя и, в конечном счете, выполняет эту работу, а затем, при необходимости, связывается со службой для выполнения некоторой работы.

Я говорю здесь, что вместо запуска службы Windows вВ другом сеансе, кроме 0 , вы можете создать небольшой исполняемый файл (вероятно, без пользовательского интерфейса), который запускается из папки запуска всех пользователей при каждом входе в систему.такое приложение затем запускается внутри соответствующего сеанса и имеет доступ к нему, оно может получить снимок экрана, затем либо сохранить его где-то самостоятельно, либо вызвать некоторые конечные точки в своей службе Windows (работающей всегда в сеансе 0) и создать службу для создания снимка экранавзят из его клиентского приложения.

я бы так и сделал, не пытаясь каким-то "волшебством" сказать Vista и 7 запустить службу в сеансе пользователя, который в конце концов невошел в систему еще при запуске системы.

2 голосов
/ 17 сентября 2011

Есть ли способ изменить сеанс службы Windows и получить экран рабочего стола сеанса другого пользователя, например сеанс 1, сеанс 2?

Нет.

Есть ли способ запустить консольное приложение, которое запускается в другом сеансе, отличном от сеанса 0, из службы Windows?

Это можно сделать, но это грязно.Он включает в себя олицетворение вошедшего в систему пользователя, манипулирование пользовательскими токенами и запуск процесса в другой сеанс с CreateProcessAsUser().Эта статья описывает что нужно.

Кроме того, вам не нужно консольное приложение, потому что на экране появится окно консоли.Вам просто нужно стандартное приложение Windows (использующее подсистему GUI), но не отображающее видимых окон.

...