Situación: Tengo un software que realiza el uso compartido de pantallas en Internet, donde un usuario actúa como presentador y otros usuarios actúan como espectadores/asistentes.C++ - Cómo capturar la pantalla, excepto en algunas ventanas
Además de las ventanas de presentación, el presentador también tiene un conjunto de WINDOWS NO DISPONIBLES que aparecen en la pantalla (una barra de botones para comenzar a compartir/dejar de compartir/etc., Una ventana de Skype, etc.).
El presentador puede configurar desde la configuración del software de compartición de pantalla para hacer invisibles estas WINDOWS NO COMPARTIDAS (es decir, no aparecerán en la pantalla compartida que se envía a los asistentes, pero el contenido de la ventana detrás de ellas aparecer en la captura de pantalla).
Las capturas de pantalla se envían a aproximadamente 10 fotogramas por segundo o más rápido.
Pregunta: ¿cómo puedo capturar la pantalla mediante programación, excepto estas ventanas SIN COMPARTIR WINDOWS?
Notas:
- Debido al valor más alto fotogramas por segundo, no puedo minimizar/maximizar/set alfa para estas ventanas, porque entonces las ventanas parpadean. La aplicación está escrita en Win32 C++.
- Usaría ventanas en capas, pero debido a la característica de composición de escritorio de Windows 7, esto no es utilizable de fábrica (y en Windows 8, ya no puede usar DwmEnableComposition para deshabilitar temporalmente la composición)
- Podría usar el enfoque de ventana en capas para Windows XP/2000/7 etc., y un enfoque diferente para Windows 8 (si hay uno), aunque preferiría un único proceso que funciona en todos los sistemas
- También podría intente "componer" las capturas de pantalla capturando imágenes individuales (del escritorio, las ventanas que deben capturarse) y usando su índice z para crear la imagen final, pero debido al valor requerido de marcos por segundo, este proceso sería demasiado lento
Sé que la reunión de MSFT es un buen ejemplo, aunque no sé cómo se hace. – zinking
Gracias, hay productos similares que hacen esto (JoinMe o GTM), también intentaré investigar esto, pero esperaba una respuesta más rápida. –
La captura de pantalla normalmente captura el "área de la pantalla sobre la ventana" en lugar del contenido dibujado de la ventana. Podría intentar capturar todas las ventanas de nivel superior visibles y recompuestas. – Deanna