我正在尝试使用Swift在Mac OS X应用程序中捕获窗口列表。CGWindowListCreateImageFromArray函数需要一个CFArray。我尝试了几种方法,这是我最接近的方法。或者有更好的方法来转换数组吗?
import Cocoa
// Example swift array of CGWindowID's
var windowIDs = [CGWindowID]();
windowIDs.append(1);
windowIDs.append(2);
// Convert to CFArray using CFArrayCreate
let allocator = kCFAllocatorDefault
let numValues = windowIDs.count as CFIndex
let callbacks: UnsafePointer<CFArrayCallBacks> = nil
var values: UnsafeMutablePointer<UnsafePointer<Void>> = nil
/* how do I convert windowIDs to UnsafeMutablePointer<UnsafePointer<Void>> for the values? */
let windowIDsCFArray = CFArrayCreate(allocator, values, numValues, callbacks);
let capture = CGWindowListCreateImageFromArray(CGRectInfinite, windowIDsCFArray, CGWindowImageOption(kCGWindowListOptionOnScreenOnly));
CGWindowListCreateImageFromArray
所期望的指针类型,但如果您尝试使用CFArrayGetValueAtIndex(cfArray, …).hashValue
从cfArray
获取值,您会发现它们分别为1
和2
的窗口ID是311
和567
- 这些是将被捕获的窗口ID,而不是1
和2
。它们是相对较小的数字,因此在许多情况下将创建错误内容的图像。 - Ian Bytchek