Sonofgrab แสดงให้เห็นถึง CGWINDOW API เพื่อคว้าเนื้อหาของชุด Windows โดยพลการ
แกนกลางของตัวอย่างนี้คือ 5 วิธีในคลาสคอนโทรลเลอร์ที่อธิบายไว้ด้านล่าง
-UpdateWindowList วิธีนี้ได้รับรายการ Windows ปัจจุบันจาก Window Server ตัวเลือกใน GUI ช่วยให้คุณสามารถยกเว้นองค์ประกอบนอกจอและองค์ประกอบเดสก์ท็อป รายการที่ส่งคืนจาก Window Server จะถูกประมวลผลเพิ่มเติม (ผ่านการโทรกลับ WindowlistapplierFunction) เพื่อสร้างรายการที่นำเสนอใน GUI
-createsingleWindowShot สร้างภาพหน้าจอที่สัมพันธ์กับ cgwindowid เดียวที่ผ่านเข้ามาขึ้นอยู่กับ "ตัวเลือกหน้าต่างเดี่ยว" ที่ระบุใน GUI การยิงหน้าจออาจรวมถึงหน้าต่างอื่น ๆ จำนวนใด ๆ
-CreateMultiWindowShot สร้างภาพหน้าจอด้วยหน้าต่างที่ผ่านเข้ามาใช้วิธี -createwindowListFromSelection เพื่อสร้าง cfarrayref ที่เข้ากันได้ซึ่งระบุหน้าต่างเพื่อสร้างภาพจาก
-createscreenshot สร้างภาพหน้าจอจากหน้าต่างทั้งหมดที่อยู่บนหน้าจอและอ่านได้
-CreatewIndowListFromSelection แปลงการเลือก GUI ของ Windows เป็น cfarrayref ที่ระบุรายการที่แน่นอนของหน้าต่างที่จะแสดงผลและคำสั่งให้แสดงผลพวกเขาใน
CGWINDOW API มีความสามารถในการจัดการกับปัญหาทั่วไปที่คุณอาจเจอในทางปฏิบัติโดยทั่วไปจะส่งคืนค่า null หากไม่สามารถติดต่อเซิร์ฟเวอร์หน้าต่างหรือภาพโปร่งใสเต็มรูปแบบเมื่อไม่สามารถเขียนภาพจากรายการที่ให้ไว้ ความคิดเห็นใน CGWINDOW.H มีรายละเอียดที่ดีในกรณีมุมและปัญหาอื่น ๆ ที่คุณอาจพบในการใช้ API นี้และมีค่ามากในการทำความเข้าใจว่าจะเกิดอะไรขึ้นในกรณีการใช้งานทั่วไปหลายกรณี
CGWINDOW API ให้ CGIMAGEREF ซึ่งมีข้อมูลสำรองที่สร้างขึ้นตามความต้องการของ Window Server เมื่อแสดงผลครั้งแรกและเช่นนี้คุณสามารถขอภาพจำนวนมากโดยไม่ต้องใช้ประสิทธิภาพจนกว่าภาพจะแสดงผล หากคุณถ่ายภาพจำนวนมากคุณจะเห็นเวลาที่ต้องใช้ในการสร้างภาพเหล่านั้นที่ใช้ในกระบวนการ Windowserver และคุณควรทราบว่าในขณะที่ CGWindowListCreateImage จะกลับมาอย่างรวดเร็ว การวาดภาพเป็นครั้งแรกมีแนวโน้มที่จะใช้เวลามากกว่าที่คุณคาดหวังสำหรับภาพจากแหล่งอื่น ๆ
โค้ดตัวอย่างสามารถกำหนดค่าเป็นเวลาการดำเนินการโดยการตั้งค่า profile_window_grab เป็น 1 คำจำกัดความของแมโครนี้จะเริ่มต้นเป็น 0 ในไฟล์แหล่งที่มาของคอนโทรลเลอร์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CGWINDOW API ให้อ้างอิงการอ้างอิง "บริการหน้าต่างควอตซ์" (https://developer.apple.com/library/mac/documentation/carbon/reference/cgwindow_reference/)
OS X 10.10 SDK หรือใหม่กว่า
OS X 10.8 หรือใหม่กว่า
เวอร์ชัน 2.0
เวอร์ชัน 1.0
========================================================================================