vez ver ventanas varias poner partes paralelo pantalla organizar las dividir como ala objective-c cocoa quartz-graphics swift

objective c - ver - ¿Cómo puedo obtener una lista de todas las ventanas, actualmente en la pantalla, en forma rápida?



dividir pantalla en dos windows 8 (3)

¿Cómo puedo obtener una lista de todas las ventanas, actualmente en la pantalla, en forma rápida ? (todos los ejemplos están precedidos por import Cocoa )

En Object-C puedo ejecutar el siguiente código con éxito:

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);

Pero cuando ejecuto el equivalente rápidamente (usando el patio de recreo para probar):

let windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kcGNullWindowID)

Me Use of unresolved identifier ''kcGNullWindowID'' un error que me dice que tengo un Use of unresolved identifier ''kcGNullWindowID'' .

Después de jugar con la ayuda de la documentación de cuarzo durante un tiempo, llegué a:

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

Pero todavía no funciona, ya que estoy recibiendo un objeto {__NSArrayM} , que no sé cómo acceder.

¿Estoy en el camino correcto o estoy haciendo algo fundamentalmente malo?


Aquí está mi versión para Swift 1.2. Es más explícito sobre los tipos, ya que sabemos que la función devuelve una matriz de diccionarios con claves de cadena.

let options = CGWindowListOption(kCGWindowListOptionOnScreenOnly) let cfInfoList = CGWindowListCopyWindowInfo(options, CGWindowID(0)).takeRetainedValue() let infoList = cfInfoList as NSArray as? [[String: AnyObject]]


Aquí hay un ejemplo en Swift 2.0, que también muestra múltiples opciones.

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


Use takeUnretainedValue() o takeRetainedValue() en windowList .

Consulte Apple''s Using Swift con Cocoa y Objective-C y lea la sección Trabajar con tipos de datos de cacao y busque objetos no administrados .

Aquí hay un ejemplo concreto:

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