簡體   English   中英

如何快速獲取當前屏幕上所有窗口的列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM