Es posible la captura de pantalla de una ventana específica (también posiblemente de otro proceso)?

Actualmente estoy capturar todo el escritorio de un monitor específico, sin embargo lo que de verdad quiero es capturar el contenido de una ventana específica (independientemente de su posición).

Es sencillo: hacer un BitBlt de escritorio de CC en el mapa de bits. Específicos de la ventana de copia no todo el escritorio, pero sólo el rectángulo de su interés (que es GetWindowRect de su ventana específica). Sí puede ser una ventana de otro proceso.
Roman R. ¿Cómo puedo encontrar el rectángulo de interés? Hay alguna forma de iterar sobre todas las ventanas y encontrar su rectángulos?
Si tienes una ventana, entonces usted tiene su HWND manejar. GetWindowRect le da sus coordenadas de pantalla.
Yo no tengo ningún manejar, sólo el nombre de la ventana.
FindWindow consigue la HWND entonces. O, usted necesita para EnumWindows para encontrar el que usted necesita, y su identificador.

OriginalEl autor ronag | 2012-07-01

2 Comentarios

  1. 13

    Sí lo es. Todo lo que necesitas es obtener la manija de la ventana que quieres capturar y utilizar WinAPI función PrintWindow por ejemplo:

    //Get the window handle of calculator application.
    HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));
    
    //Take screenshot.
    PrintWindow( hWnd, getDC(hWnd), 0 );

    Aquí tiene PrintWindow documentación.

    Lo que si esta ventana no está centrado o se oculta, detrás de otras ventanas, este puede seguir trabajando?
    Sí, sí 🙂
    Cómo continuar y guardar la captura de pantalla (o los datos) después de PrintWindow?
    De la PrintWindow documentación: «La aplicación que posee la ventana que se hace referencia por hWnd […] recibe un WM_PRINT mensaje o […] una WM_PRINTCLIENT mensaje.» – En otras palabras: El origen de la ventana debe implementar un WM_PRINT/WM_PRINTCLIENT controlador de mensaje. Si no, PrintWindow no funciona. Esto no es una solución general.

    OriginalEl autor Blood

  2. 7

    Sí, tan sencillo como capturar la pantalla completa. Usted sólo tiene que utilizar GetWindowDC() en la ventana en lugar de GetDesktopWindow(), entonces BitBlt() de que a su controlador de dominio de destino. También puede obtener el tamaño correcto mediante el uso de GetWindowRect().

    Tenga en cuenta que este método también permite la captura de oculto/ventanas de cubierta donde la captura de pantalla con un rectángulo delimitador no.

    Ver esta pregunta para más detalles.

    Esto funciona. Gran.

    OriginalEl autor Deanna

Dejar respuesta

Please enter your comment!
Please enter your name here