[英]How can I get a list of all windows, currently on the screen, in swift?
我怎樣才能獲得的所有窗口的列表,當前在屏幕上,在迅速 ? (所有示例均以import Cocoa
)
在Objective-C中,我可以成功運行以下代碼:
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
但是當我迅速運行等效項時(使用運動場進行測試):
let windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kcGNullWindowID)
我收到一條錯誤消息,告訴我我有Use of unresolved identifier 'kcGNullWindowID'
。
在石英文檔的幫助下玩了一段時間之后,我開始:
let windowList = CGWindowListCopyWindowInfo(CGWindowListOption(kCGWindowListOptionOnScreenOnly), CGWindowListOption(0))
但是它仍然無法正常工作,因為我收到一個{__NSArrayM}
對象,我不知道該如何訪問。
我是在正確的道路上還是在做根本上錯誤的事情?
這是Swift 2.0中的示例,還演示了多個選項。
let options = CGWindowListOption(arrayLiteral: CGWindowListOption.ExcludeDesktopElements, CGWindowListOption.OptionOnScreenOnly)
let windowListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
let infoList = windowListInfo as NSArray? as? [[String: AnyObject]]
在windowList
上使用takeUnretainedValue()
或takeRetainedValue()
。
查看Apple的將Swift與Cocoa和Objective-C結合使用,並閱讀“ 使用Cocoa數據類型 ”一節,然后查找非托管對象 。
這是一個具體的例子:
import Cocoa
let windowInfosRef = CGWindowListCopyWindowInfo(CGWindowListOption(kCGWindowListOptionOnScreenOnly), CGWindowID(0))
let windowInfos = windowInfosRef.takeRetainedValue().__conversion() // cast to swift dictionary
println(windowInfos) // print the swift dictionary
這是我的Swift 1.2版本。 由於我們知道函數會返回帶有字符串鍵的字典數組,因此對類型的描述更為明確。
let options = CGWindowListOption(kCGWindowListOptionOnScreenOnly)
let cfInfoList = CGWindowListCopyWindowInfo(options, CGWindowID(0)).takeRetainedValue()
let infoList = cfInfoList as NSArray as? [[String: AnyObject]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.