El servicio de Windows no pudo obtener una captura de pantalla en Windows 7

Tengo un servicio de Windows que obtiene las capturas de pantalla. Pero está creando solo pantallas negras. Sé que esto sucede debido al aislamiento de la sesión 0. Busqué en Internet y no encontré ninguna solución aprobada para este problema, cualquier idea de trabajo será realmente buena.

1- ¿Hay alguna manera de cambiar la sesión de un servicio de Windows y obtener la pantalla del escritorio de la sesión de otro usuario como la sesión 1, sesión 2?

2- ¿Hay alguna manera de iniciar una aplicación de consola que se ejecute en una sesión diferente a la sesión 0 de un servicio de Windows?

¿Hay alguna manera de cambiar la sesión de un servicio de Windows y obtener la pantalla del escritorio de la sesión de otro usuario como la sesión 1, sesión 2?

No.

¿Hay alguna manera de iniciar una aplicación de consola que se ejecute en una sesión diferente a la sesión 0 de un servicio de Windows?

Esto se puede hacer pero es desordenado. Supone la suplantación del usuario conectado, la manipulación de tokens de usuario y el inicio de un proceso en una sesión diferente con CreateProcessAsUser() . Este artículo describe lo que se necesita.

Por otro lado, no desea una aplicación de consola porque eso proyectará una ventana de consola en su captura de pantalla. Solo quiere una aplicación estándar de Windows (utilizando el subsistema GUI) pero una que no muestre ninguna ventana visible.

un servicio de Windows está diseñado para ejecutarse también cuando no hay usuarios conectados, funciona como un proceso de servidor siempre activo y atento, o activo y activo, o inactivo.

Creo que lo que necesita es una aplicación cliente que se ejecute dentro de cada sesión del usuario registrado y, finalmente, haga el trabajo y, si es necesario, se comunica con el servicio para llevar a cabo un trabajo.

Aquí estoy diciendo que en lugar de tener el servicio de Windows ejecutándose en otra sesión que no sea 0 , puede crear un pequeño ejecutable (probablemente sin UI) que se inicia desde la carpeta de inicio de todos los usuarios en cada inicio de sesión de usuario. dicha aplicación se ejecuta dentro de la sesión adecuada y tiene acceso a ella, puede obtener la captura de pantalla y luego almacenarla en algún lugar o llamar a algunos puntos finales en su Servicio de Windows (ejecutándose siempre en la sesión 0) y realizar el servicio para elaborar la captura de pantalla tomado de la aplicación cliente de él.

esta es la forma en que lo haría, sin intentar algo de “magia” para decirle a Vista y 7 que inicien un servicio dentro de una sesión de un usuario que al final aún no ha iniciado sesión cuando se inicia el sistema.