SONOFGRAB demuestra la API CGWindow para obtener el contenido de conjuntos arbitrarios de ventanas.
El núcleo de esta muestra son 5 métodos en la clase del controlador, que se describe a continuación.
-PdateWinDowlist Este método obtiene la lista actual de Windows desde el servidor del servidor. Las opciones en la GUI le permiten excluir ventanas fuera de pantalla y elementos de escritorio. La lista devuelta desde el servidor del servidor se procesa más (a través de la devolución de llamada de WindowListApplierFunction) para producir la lista que se presenta en la GUI.
-CreateSingleLingWindowshot crea una captura de pantalla en relación con el único cgwindowid que se pasa. Dependiendo de las "opciones de ventana única" especificadas en la GUI, la captura de pantalla puede incluir cualquier número de otras ventanas y puede incluir o no la ventana que realmente pasó a este método.
-CreateMultiWindowShot crea una captura de pantalla con exactamente las ventanas que pasan. Utiliza el método -CreatewindowlistFromSelection para crear un cfarrayRef compatible que especifica las ventanas para crear una imagen desde.
-CreateScreenshot crea una captura de pantalla de todas las ventanas que actualmente están en pantalla y legibles.
-CreatewindowlistFromSelection transforma la selección de GUI de Windows en un cfarrayRef que especifica la lista exacta de ventanas para representar y el orden para convertirlas.
La API de CGWindow es capaz de tratar con problemas comunes que puede encontrar en la práctica, generalmente devolviendo nulo si no es posible contactar al servidor de ventanas, o una imagen transparente completa cuando no es posible componer una imagen de la lista dada. Los comentarios en cgwindow.h entran en gran detalle en los casos de esquina y otros problemas que puede encontrar al usar esta API y es invaluable para comprender lo que sucederá en muchos casos de uso comunes.
La API de CGWindow proporciona CGIMageref's que cuyos datos de respaldo son creados a pedido por el servidor de la ventana cuando se reproduce por primera vez, y como tal puede solicitar una gran cantidad de imágenes sin recibir un éxito de rendimiento hasta que la imagen se represente. Si está capturando una gran cantidad de imágenes, verá el tiempo requerido para crear las imágenes gastadas en el proceso de Windowserver, y debe tener en cuenta que, si bien CGWindowlistCreateImage volverá rápidamente. Es probable que dibujar la imagen por primera vez consuma más tiempo del que podría esperar para una imagen de otras fuentes.
El código de muestra se puede configurar para cronometrar sus operaciones estableciendo el perfil_window_grab en 1. La definición de esta macro se defraude a 0 en el archivo de origen controlador.m.
Para obtener más información sobre la API CGWindow, consulte la referencia "Servicios de ventana de cuarzo" (https://developer.apple.com/library/mac/documentation/carbon/reference/cgwindow_reference/).
OS X 10.10 SDK o posterior
OS X 10.8 o posterior
Versión 2.0
Versión 1.0
================================================================================== Copyright (C) 2008-2015 Apple Inc. en todos los derechos reservados.