我正在尝试使用 Swift 从核心图形 API 获取 OSX 上的窗口列表(以便稍后捕获它们的图像)。经过一番研究,我发现 CGWindowListCopyWindowInfo Objective-C API 调用具有以下签名:
CFArrayRef CGWindowListCopyWindowInfo(
CGWindowListOption option,
CGWindowID relativeToWindow
);
参数
option:描述要使用哪些窗口词典的选项
返回。典型选项可让您返回所有窗口的字典或
对于窗口上方或下方指定的窗口
相对窗口参数。有关详细信息,请参阅窗口列表
选项常量。
relativeToWindow:用作窗口的 ID
确定要使用哪些其他窗口词典时的参考点
返回。对于不需要参考窗口的选项,这
参数可以是kCGNullWindowID。
https://developer.apple.com/library/mac/documentation/Carbon/Reference/CGWindow_Reference/Reference/Functions.html https://developer.apple.com/library/mac/documentation/Carbon/Reference/CGWindow_Reference/Reference/Functions.html
在我的快速应用程序中,我尝试像这样使用它:
import Cocoa
import CoreFoundation
let option: CGWindowListOption = kCGWindowListOptionOnScreenOnly
let relativeToWindow: CGWindowID = kCGNullWindowID
let info = CGWindowListCopyWindowInfo(option, relativeToWindow)
但 XCode (playground) 告诉我
- 它不能使用 int 作为 CGWindowListOption (kCGWindowListOptionOnScreenOnly == 0)
- kCGNullWindowID 是一个未解析的标识符
我在这里做错了什么?
一起:
let option = CGWindowListOption(kCGWindowListOptionOnScreenOnly)
let relativeToWindow = CGWindowID(0)
let info = CGWindowListCopyWindowInfo(option, relativeToWindow).takeRetainedValue()
然后你可以枚举这个字典数组
for dict in info as! [ [ String : AnyObject] ] {
// ...
}
更新为Swift 3:
if let info = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [[ String : Any]] {
for dict in info {
// ...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)