2009-02-10 15 views
34

¿Cuál es la mejor (más fácil) forma de tomar una captura de pantalla de una aplicación en ejecución con C++ en Windows?¿Cuál es la mejor manera de tomar capturas de pantalla de una ventana con C++ en Windows?

+12

Presione el botón 'Imprimir pantalla' en el teclado. –

+8

¿Cómo fue esta pregunta fuera del tema? Me pregunta cómo hacerlo programáticamente, lo cual me parece bastante relevante (y no es demasiado raro). – jamesdlin

+3

¿Offtopic? De Verdad? – Nakilon

Respuesta

26

Tienes que obtener el contexto del dispositivo de la ventana (GetWindowDC()) y copiar la imagen (BitBlt()) desde ella. Dependiendo de qué más sepa acerca de la aplicación, utilizará diferentes métodos para encontrar el identificador de esa ventana que pasará al GetWindowDC().

+6

por favor agregue más detalles sobre cómo usar GetWindowDC y BitBlt para obtener una captura de pantalla. Quiero los detalles también ... – jondinham

+0

Código de necesidad :(... – Sreekar

3

En la documentación de la función keybd_event indica que puede usarlo para tomar una captura de pantalla y guardarla en el portapapeles. Por ejemplo:

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0); 

En mi versión (Visual Studio 2005 ayuda instalado en mi ordenador) que indica que se puede tomar una captura de pantalla de todo el escritorio estableciendo el segundo parámetro a 0, o una captura de pantalla de sólo el la aplicación actual configurándola en 1.

Sacarla del búfer del portapapeles se deja como ejercicio para el lector.

Sin embargo, lo pensaría cuidadosamente antes de hacer esto, ya que dejará los datos de imagen ya presentes en el portapapeles.

+1

ese es el evento para la tecla PrintScr en el teclado. El 'keybd_event' que indicó no se puede usar para tomar una captura de pantalla. ¡Qué concepto está malinterpretando! – jondinham

+2

@Paul Siga el enlace que he incluido y revise la sección de Comentarios. Indica: "Una aplicación puede simular una pulsación de la tecla PRINTSCRN para obtener una captura de pantalla y guardarla en el portapapeles. Para hacerlo, llame a keybd_event con el parámetro bVk establecido en VK_SNAPSHOT. " – Daemin

+0

bueno, ya veo, no sabía que podíamos simular la presión de la tecla de impresión :) – jondinham

0

Aquí hay un ejemplo code
Puede hacer CaptureAnImage(GetDesktopWindow()); para hacer una captura de pantalla.

Cuestiones relacionadas