2014-06-07 10 views
10

swift में, वर्तमान में स्क्रीन पर, सभी विंडो की सूची कैसे प्राप्त कर सकता हूं? (सभी उदाहरण import Cocoa से पहले कर रहे हैं)मैं वर्तमान में स्क्रीन पर, सभी विंडो की सूची कैसे प्राप्त कर सकता हूं?

में उद्देश्य-सी मैं कोड निम्नलिखित सफलतापूर्वक चला सकते हैं:

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID); 

लेकिन जब मैं (परीक्षण करने के लिए खेल का मैदान का प्रयोग करके) तेज में बराबर चलाते हैं :

let windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kcGNullWindowID) 

मुझे यह बताते हुए एक त्रुटि मिलती है कि मेरे पास Use of unresolved identifier 'kcGNullWindowID' है।

थोड़ी देर के लिए quartz documentation की मदद से चारों ओर खेलने के बाद मैं करने के लिए मिल गया है:

let windowList = CGWindowListCopyWindowInfo(CGWindowListOption(kCGWindowListOptionOnScreenOnly), CGWindowListOption(0)) 

लेकिन यह अभी भी रूप में मैं एक {__NSArrayM} वस्तु है, जो मैं कैसे उपयोग करने के लिए पता नहीं है प्राप्त कर रहा काम नहीं करता है ।

क्या मैं सही रास्ते पर हूं या क्या मैं कुछ मौलिक रूप से गलत कर रहा हूं?

+0

यह एक एनएसएमयूटेबलएरे है। – CrimsonChris

+0

क्या ओबीजेसी संस्करण है, 'CGWindowListCopyWindowInfo' थ्रेड सुरक्षित है? या क्या इसे मुख्य धागे से चलाना है? – Noitidart

उत्तर

16

यहां स्विफ्ट 2.0 में एक उदाहरण है, जो कई विकल्पों को भी प्रदर्शित करता है।

let options = CGWindowListOption(arrayLiteral: CGWindowListOption.ExcludeDesktopElements, CGWindowListOption.OptionOnScreenOnly) 
    let windowListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0)) 
    let infoList = windowListInfo as NSArray? as? [[String: AnyObject]] 
6

takeUnretainedValue() या takeRetainedValue()windowList पर takeRetainedValue() का उपयोग करें।

चेक बाहर एप्पल के Using Swift with Cocoa and Objective-C और अनुभाग कहा जाता है के साथ कोको डेटा प्रकार कार्य पढ़ सकते हैं और अप्रबंधित वस्तुओं के लिए देखो।

import Cocoa 

let windowInfosRef = CGWindowListCopyWindowInfo(CGWindowListOption(kCGWindowListOptionOnScreenOnly), CGWindowID(0)) 
let windowInfos = windowInfosRef.takeRetainedValue().__conversion() // cast to swift dictionary 
println(windowInfos) // print the swift dictionary 
1

यहाँ स्विफ्ट 1.2 के लिए मेरे संस्करण है:

यहाँ एक ठोस उदाहरण है। यह प्रकारों के बारे में अधिक स्पष्ट है, क्योंकि हम जानते हैं कि फ़ंक्शन स्ट्रिंग कुंजियों वाले शब्दकोशों की एक सरणी देता है।

let options = CGWindowListOption(kCGWindowListOptionOnScreenOnly) 
let cfInfoList = CGWindowListCopyWindowInfo(options, CGWindowID(0)).takeRetainedValue() 
let infoList = cfInfoList as NSArray as? [[String: AnyObject]] 
संबंधित मुद्दे

 संबंधित मुद्दे