Sonofgrab demonstriert die CGWindow -API, um den Inhalt willkürlicher Fenstermengen zu erfassen.
Der Kern dieser Probe sind 5 Methoden in der Controller -Klasse, die unten beschrieben wurden.
-UpdateWindowlist Diese Methode erhält die aktuelle Windows -Liste über den Fensterserver. Mit Optionen in der GUI können Sie Offscreen -Fenster und Desktop -Elemente ausschließen. Die vom Fensterserver zurückgegebene Liste wird weiter verarbeitet (über den Rückruf von WindowListApplierfunction), um die in der GUI angegebene Liste zu erstellen.
-CreatursingleWindowshot erstellt einen Screenshot in Bezug auf das einzelne CGWindowid, der übergeben wird. Abhängig von den in der GUI angegebenen "Einzelfensteroptionen" kann der Screenshot eine beliebige Anzahl anderer Fenster enthalten und möglicherweise das Fenster enthalten oder nicht, das tatsächlich an diese Methode übergeben wird.
-CreateMultiWindowShot erstellt einen Screenshot mit genau den Fenstern, die in die Fenster weitergegeben werden. Verwendet die Methode -createwindowlistFromSelection, um eine kompatible CFARRAYREF zu erstellen, die die Fenster zum Erstellen eines Bildes angibt.
-CreateScreenshot erstellt einen Screenshot von allen Fenstern, die derzeit auf dem Bildschirm und lesbar sind.
-CreatewindowlistFromSelection verwandelt die GUI -Auswahl von Fenstern in ein CFARRAYREF, das die genaue Liste der Fenster angibt, um sie zu rendern.
Die CGWindow -API kann mit allgemeinen Problemen umgehen, auf die Sie in der Praxis möglicherweise begegnen, und kehren im Allgemeinen Null zurück, wenn es nicht möglich ist, den Fensterserver zu kontaktieren, oder in einem vollständigen transparenten Bild, wenn es nicht möglich ist, ein Bild aus der angegebenen Liste zu komponieren. Die Kommentare in CGWindow.h sind in den Eckfällen und anderen Themen, die Sie bei der Verwendung dieser API möglicherweise finden, eindeutig ausführlich eingehen und ist von unschätzbarem Wert, um zu verstehen, was in vielen gemeinsamen Anwendungsfällen passieren wird.
Die CGWindow -API enthält CGImageRefs, deren Backing -Daten beim ersten Rendern vom Fensterserver auf Anfrage erstellt werden. Daher können Sie eine große Anzahl von Bildern anfordern, ohne eine Leistung zu erhalten, bis das Bild gerendert ist. Wenn Sie eine große Anzahl von Bildern aufnehmen, sehen Sie die Zeit, die erforderlich ist, um die im Windowsserver -Prozess ausgegebenen Bilder zu erstellen, und Sie sollten sich bewusst sein, dass CGWindowlistcreateimage zwar schnell zurückkehrt. Wenn Sie das Bild zum ersten Mal zeichnen, werden Sie wahrscheinlich mehr Zeit verbrauchen, als Sie für ein Bild aus anderen Quellen erwarten könnten.
Der Beispielcode kann so konfiguriert werden, dass seine Operationen festgelegt werden, indem die Definition des Makros in der Quelldatei Controller.m standardmäßig auf 0 standardmäßig 0 standardmäßig eingestellt wird.
Weitere Informationen zur CGWindow -API finden Sie in der Referenz "Quartz Fenster" (https://developer.apple.com/library/mac/documentation/carbon/reference/cgwindow_reference/).
OS X 10.10 SDK oder höher
OS X 10.8 oder höher
Version 2.0
Version 1.0
======================================================================== Copyright (c) 2008-2015 Apple Inc.