Служба Windows не может получить скриншот в Windows 7
У меня есть служба Windows, которая получает скриншоты. Но это создает только черные экраны. Я знаю, что это происходит из-за изоляции сессии 0. Я искал в интернете и не смог найти ни одного одобренного решения для этой проблемы, любые рабочие идеи будут действительно хорошими.
1. Есть ли способ изменить сеанс службы Windows и получить экран рабочего стола сеанса другого пользователя, такого как сеанс 1, сеанс 2?
2- Есть ли способ запустить консольное приложение, которое выполняется в другом сеансе, отличном от сеанса 0, из службы Windows?
2 ответа
Есть ли способ изменить сеанс службы Windows и получить экран рабочего стола сеанса другого пользователя, как сеанс 1, сеанс 2?
Нет.
Есть ли способ запустить консольное приложение, которое выполняется в другом сеансе, кроме сеанса 0, из службы Windows?
Это можно сделать, но это грязно. Он включает в себя олицетворение вошедшего в систему пользователя, манипулирование пользовательскими токенами и запуск процесса в другой сеанс с CreateProcessAsUser()
, Эта статья описывает, что нужно.
Кроме того, вам не нужно консольное приложение, потому что оно раскроет окно консоли на вашем скриншоте. Вам просто нужно стандартное приложение Windows (с использованием подсистемы GUI), но не отображающее видимых окон.
Служба Windows предназначена для работы также, когда нет подключенных пользователей, она работает как серверный процесс, всегда включенный и прослушивающий, или готовый к выполнению чего-либо, или бездействующий.
Я думаю, что вам нужно клиентское приложение, которое запускается внутри каждого сеанса зарегистрированного пользователя и, в конце концов, выполняет эту работу, а затем, при необходимости, связывается со службой для выполнения некоторой работы.
Я говорю здесь, что вместо того, чтобы служба Windows работала в другом сеансе, отличном от 0, вы можете создать небольшой исполняемый файл (возможно, без пользовательского интерфейса вообще), который запускается из папки запуска всех пользователей при каждом входе пользователя в систему. такое приложение затем запускается внутри соответствующего сеанса и имеет к нему доступ, оно может получить снимок экрана, затем либо сохранить его где-то самостоятельно, либо вызвать некоторые конечные точки в своей службе Windows (работающей всегда в сеансе 0) и создать службу для создания снимка экрана взято из клиентского приложения этого.
это то, как я бы это сделал, не пытаясь каким-то "волшебством" сказать Vista и 7 запустить службу в сеансе пользователя, который в конце еще не вошел в систему при запуске системы.