O SonofGrab demonstra a API CGWindow para obter o conteúdo de conjuntos arbitrários de Windows.
O núcleo desta amostra são 5 métodos na classe do controlador, descritos abaixo.
-UpDateWindowlist Este método obtém a lista atual de Windows no servidor de janelas. As opções na GUI permitem excluir o Windows e os elementos da área de trabalho fora da tela. A lista retornada do servidor de janela é processada (via WindowListApplierFunction Returb) para produzir a lista apresentada na GUI.
-createsinglewindowshot cria uma foto de tela em relação ao único cGWindowID que é passado. Dependendo das "opções de janela única" especificadas na GUI, a foto da tela pode incluir qualquer número de outras janelas e pode ou não incluir a janela passada para este método.
-CreatemultiWindowShot Cria uma foto de tela exatamente com as janelas passadas. Usa o método -CreatewindowlSTFromSelection para criar um CFARRAYREF compatível que especifica o Windows para criar uma imagem.
-CreatesCreenshot Cria uma foto de tela de todas as janelas que estão atualmente na tela e legíveis.
-Createwindowlist FromSelection transforma a seleção da GUI do Windows em um CFARRAYREF que especifica a lista exata do Windows para renderizar e a ordem para renderizá -los.
A API CGWindow é capaz de lidar com problemas comuns que você pode encontrar na prática, geralmente retornando nulo se não for possível entrar em contato com o servidor da janela ou uma imagem transparente completa quando não for possível compor uma imagem da lista fornecida. Os comentários no CGWindow.h entram em grandes detalhes nos casos de canto e em outros problemas que você pode encontrar ao usar essa API e é inestimável para entender o que acontecerá em muitos casos de uso comum.
A API CGWindow fornece CGIMAGEREF que cujos dados de apoio são criados sob demanda pelo servidor de janela quando renderizados pela primeira vez e, como tal, você pode solicitar um grande número de imagens sem tomar um desempenho atingido até que a imagem seja renderizada. Se você estiver capturando um grande número de imagens, verá o tempo necessário para criar as imagens gastas no processo do Windowserver, e estará ciente de que, embora o CGWindowlistCreateImage retornará rapidamente. Desenhar a imagem pela primeira vez provavelmente consumirá mais tempo do que você poderia esperar para uma imagem de outras fontes.
O código de amostra pode ser configurado para cronometrar suas operações, definindo o perfil_window_grab como 1. A definição desta macro é padronizada como 0 no arquivo de origem controller.m.
Para obter mais informações sobre a API do CGWindow, consulte a referência "Window Services de quartzo" (https://developer.apple.com/library/mac/documentation/carbon/reference/cgwindow_reference/).
OS X 10.10 SDK ou mais tarde
OS X 10,8 ou mais tarde
Versão 2.0
Versão 1.0
================================================================================ Copyright (C) 2008-2015 Apple Inc. All rights reserved.