SonofGrab montre l'API CGWindow pour saisir le contenu des ensembles arbitraires de fenêtres.
Le cœur de cet échantillon est 5 méthodes sur la classe de contrôleur, décrites ci-dessous.
-Updatewindowlist Cette méthode obtient la liste actuelle des fenêtres du serveur de fenêtres. Les options dans l'interface graphique vous permettent d'exclure des fenêtres hors écran et des éléments de bureau. La liste renvoyée du serveur de fenêtres est en outre traitée (via le rappel WindowListApplierFunction) pour produire la liste présentée dans l'interface graphique.
-CreateSinglewindowshot crée une capture d'écran par rapport au seul cgwindowid qui est passé. En fonction des "options de fenêtre unique" spécifiées dans l'interface graphique, la capture d'écran peut inclure n'importe quel nombre d'autres fenêtres et peut ou non inclure la fenêtre réellement transmise à cette méthode.
-CreateMultiwindowshot crée une capture d'écran avec exactement ces fenêtres passées. Utilise la méthode -CreateWindowlistFromSelection pour créer un Cfarrayref compatible qui spécifie les fenêtres pour créer une image à partir de.
-CreateScreenshot crée une prise de vue d'écran à partir de toutes les fenêtres qui sont actuellement à l'écran et lisibles.
-CreatewindowlistFromSelection transforme la sélection de l'interface graphique des fenêtres en un cfarrayref qui spécifie la liste exacte des fenêtres à rendre et l'ordre de les rendre.
L'API CGWindow est capable de traiter des problèmes communs que vous pouvez rencontrer dans la pratique, en renvoyant généralement Null s'il n'est pas possible de contacter le serveur de fenêtres, ou une image transparente complète lorsqu'il n'est pas possible de composer une image de la liste donnée. Les commentaires sur cgwindow.h vont dans les détails des cas d'angle et d'autres problèmes que vous pouvez trouver dans l'utilisation de cette API et est inestimable pour comprendre ce qui se passera dans de nombreux cas d'utilisation courants.
L'API CGWindow fournit des CGIMageRef qui dont les données de soutien sont créées à la demande par le serveur de fenêtres lors de la première fois, et en tant que tel, vous pouvez demander un grand nombre d'images sans prendre un coup de performance jusqu'à ce que l'image soit rendue. Si vous capturez un grand nombre d'images, vous verrez le temps nécessaire pour créer ces images passées dans le processus Windowserver, et vous devez savoir que si CgwindowlistCreateImage reviendra rapidement. Le dessin de l'image pour la première fois est susceptible de consommer plus de temps que vous pourriez vous attendre pour une image provenant d'autres sources.
L'exemple de code peut être configuré pour chronométrer ses opérations en définissant le profil_window_grab vers 1. La définition de cette macro est par défaut à 0 dans le fichier source Controller.m.
Pour plus d'informations sur l'API CGWindow, reportez-vous à la référence "Quartz Window Services" (https://developer.apple.com/library/mac/documentation/carbon/reference/cgwindow_reference/).
SDK OS X 10.10 ou plus tard
OS X 10.8 ou plus tard
Version 2.0
Version 1.0
=============================================================================================================.