Sonofgrab은 CGwindow API를 보여주기 위해 임의의 창의 내용을 가져옵니다.
이 샘플의 핵심은 아래에 설명 된 컨트롤러 클래스의 5 가지 방법입니다.
-updatewindowlist이 방법은 Window 서버에서 현재 Windows 목록을 가져옵니다. GUI의 옵션을 사용하면 오프 스크린 창 및 데스크탑 요소를 제외 할 수 있습니다. Window 서버에서 반환 된 목록은 GUI에 제시된 목록을 생성하기 위해 (Windowlistapplierfunction Callback을 통해) 추가로 처리됩니다.
-CreatesingleWindowShot가 전달되는 단일 CGWindowid에 비해 스크린 샷을 만듭니다. GUI에 지정된 "단일 창 옵션"에 따라 스크린 샷에는 다른 여러 창이 포함될 수 있으며 실제로이 방법으로 전달 된 창을 포함하거나 포함하지 않을 수도 있습니다.
-createmultiwindowshot는 정확히 Windows가 통과 한 스크린 샷을 만듭니다. -createWindowListFromSelection 메소드를 사용하여 Windows를 지정하여 이미지를 생성하는 호환 가능한 cfarrayRef를 만듭니다.
-CreateScreenshot는 현재 화면에 있고 읽을 수있는 모든 Windows에서 스크린 샷을 만듭니다.
-CreateWinDowlistFromSelection 렌더링 할 정확한 창 목록과 렌더링하는 순서를 지정하는 Windows의 GUI 선택을 CfarrayRef로 변환합니다.
CGWindow API는 실제로 발생할 수있는 일반적인 문제를 처리 할 수 있으며, 일반적으로 Window 서버에 연락 할 수없는 경우 NULL을 반환하거나 주어진 목록에서 이미지를 작성할 수없는 경우 전체 투명한 이미지를 반환합니다. CGWindow.h의 의견은 코너 케이스 및이 API를 사용할 때 찾을 수있는 기타 문제에 대해 자세히 설명하며 많은 일반적인 사용 사례에서 어떤 일이 일어날 지 이해하는 데 매우 중요합니다.
CGWindow API는 처음 렌더링 될 때 Window Server에 의해 요청시 Backing Data를 작성하는 CGIMAGEREF를 제공하므로 이미지가 렌더링 될 때까지 성능을 얻지 않고도 많은 수의 이미지를 요청할 수 있습니다. 많은 이미지를 캡처하는 경우 Wind 처음으로 이미지를 그리는 것은 다른 소스의 이미지에 대해 기대할 수있는 것보다 더 많은 시간을 소비 할 것입니다.
샘플 코드는 profile_window_grab을 1로 설정하여 작업 시간을 시간에 맞게 구성 할 수 있습니다.이 매크로의 정의는 Controller.m 소스 파일에서 0으로 기본적으로 표시됩니다.
CGWindow API에 대한 자세한 내용은 "Quartz Window Services"참조 (https://developer.apple.com/library/mac/documbon/reference/cgwindow_reference/)를 참조하십시오.
OS X 10.10 SDK 이상
OS X 10.8 이상
버전 2.0
버전 1.0
=========================================================================================== 2008-2015 Apple Inc.