2011-03-12 8 views
11

En la documentación, se dice que la lista de ventanas devueltos por este método:Frente mayoría de la ventana usando CGWindowListCopyWindowInfo

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID); 

volverá ventanas con el fin de adelante hacia atrás. Pero no es así ... La mayoría de la ventana frontal debe ser de prueba, pero aquí está el cabo de esta matriz:

2011-03-12 18:18:14.221 test[982:a0f] (
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 22; 
      Width = 212; 
      X = 1662; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 25; 
     kCGWindowMemoryUsage = 30104; 
     kCGWindowName = ""; 
     kCGWindowNumber = 14; 
     kCGWindowOwnerName = SystemUIServer; 
     kCGWindowOwnerPID = 99; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 0; 
     kCGWindowBounds =   { 
      Height = 22; 
      Width = 1920; 
      X = 0; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 25; 
     kCGWindowMemoryUsage = 5528; 
     kCGWindowNumber = 15; 
     kCGWindowOwnerName = SystemUIServer; 
     kCGWindowOwnerPID = 99; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 22; 
      Width = 46; 
      X = 1874; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 25; 
     kCGWindowMemoryUsage = 5528; 
     kCGWindowName = ""; 
     kCGWindowNumber = 12; 
     kCGWindowOwnerName = SystemUIServer; 
     kCGWindowOwnerPID = 99; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 22; 
      Width = 1920; 
      X = 0; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 24; 
     kCGWindowMemoryUsage = 218520; 
     kCGWindowName = "Shared Menubar"; 
     kCGWindowNumber = 6; 
     kCGWindowOwnerName = "Window Server"; 
     kCGWindowOwnerPID = 73; 
     kCGWindowSharingState = 2; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 1058; 
      Width = 1920; 
      X = 0; 
      Y = 22; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 20; 
     kCGWindowMemoryUsage = 1200; 
     kCGWindowNumber = 13; 
     kCGWindowOwnerName = Dock; 
     kCGWindowOwnerPID = 98; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 52; 
      Width = 676; 
      X = 622; 
      Y = 1028; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 19; 
     kCGWindowMemoryUsage = 157080; 
     kCGWindowName = "Magic Mirror"; 
     kCGWindowNumber = 16; 
     kCGWindowOwnerName = Dock; 
     kCGWindowOwnerPID = 98; 
     kCGWindowSharingState = 2; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 382; 
      Width = 480; 
      X = 335; 
      Y = 367; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 792496; 
     kCGWindowName = test; 
     kCGWindowNumber = 252; 
     kCGWindowOwnerName = test; 
     kCGWindowOwnerPID = 982; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 807; 
      Width = 1206; 
      X = 321; 
      Y = 157; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 4055280; 
     kCGWindowName = "AppDelegate.m - test"; 
     kCGWindowNumber = 24; 
     kCGWindowOwnerName = Xcode; 
     kCGWindowOwnerPID = 132; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 967; 
      Width = 960; 
      X = 175; 
      Y = 22; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 3817968; 
     kCGWindowName = "test - Debugger Console"; 
     kCGWindowNumber = 31; 
     kCGWindowOwnerName = Xcode; 
     kCGWindowOwnerPID = 132; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 967; 
      Width = 1845; 
      X = 121; 
      Y = 22; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 882288; 
     kCGWindowName = "CocoaDev Forums - get focused window id"; 
     kCGWindowNumber = 80; 
     kCGWindowOwnerName = "Google Chrome"; 
     kCGWindowOwnerPID = 244; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 784; 
      Width = 885; 
      X = 560; 
      Y = 157; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 318768; 
     kCGWindowName = "Console Messages"; 
     kCGWindowNumber = 125; 
     kCGWindowOwnerName = Console; 
     kCGWindowOwnerPID = 482; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 494; 
      Width = 1167; 
      X = 519; 
      Y = 417; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 2441264; 
     kCGWindowName = Debug; 
     kCGWindowNumber = 54; 
     kCGWindowOwnerName = Finder; 
     kCGWindowOwnerPID = 100; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 382; 
      Width = 480; 
      X = 335; 
      Y = 367; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 55216; 
     kCGWindowName = test; 
     kCGWindowNumber = 223; 
     kCGWindowOwnerName = test; 
     kCGWindowOwnerPID = 849; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 437; 
      Width = 770; 
      X = 396; 
      Y = 308; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 238512; 
     kCGWindowName = Applications; 
     kCGWindowNumber = 19; 
     kCGWindowOwnerName = Finder; 
     kCGWindowOwnerPID = 100; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 437; 
      Width = 770; 
      X = 450; 
      Y = 429; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = 0; 
     kCGWindowMemoryUsage = 332720; 
     kCGWindowName = Applications; 
     kCGWindowNumber = 17; 
     kCGWindowOwnerName = Finder; 
     kCGWindowOwnerPID = 100; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
     kCGWindowWorkspace = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 14; 
      Width = 1920; 
      X = 0; 
      Y = 22; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = "-20"; 
     kCGWindowMemoryUsage = 5528; 
     kCGWindowName = "Backstop Menubar"; 
     kCGWindowNumber = 11; 
     kCGWindowOwnerName = "Window Server"; 
     kCGWindowOwnerPID = 73; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 2; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 1080; 
      Width = 1920; 
      X = 0; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = "-2147483627"; 
     kCGWindowMemoryUsage = 1200; 
     kCGWindowName = ""; 
     kCGWindowNumber = 10; 
     kCGWindowOwnerName = Finder; 
     kCGWindowOwnerPID = 100; 
     kCGWindowSharingState = 1; 
     kCGWindowStoreType = 1; 
    }, 
     { 
     kCGWindowAlpha = 1; 
     kCGWindowBounds =   { 
      Height = 1080; 
      Width = 1920; 
      X = 0; 
      Y = 0; 
     }; 
     kCGWindowIsOnscreen = 1; 
     kCGWindowLayer = "-2147483628"; 
     kCGWindowMemoryUsage = 8328600; 
     kCGWindowName = Desktop; 
     kCGWindowNumber = 2; 
     kCGWindowOwnerName = "Window Server"; 
     kCGWindowOwnerPID = 73; 
     kCGWindowSharingState = 2; 
     kCGWindowStoreType = 2; 
    } 
) 

¿Qué es SystemUIServer, muelle y espejo mágico? Estas no son mis aplicaciones más populares. ¡Gracias!

Respuesta

16

hacerse con una copia de la aplicación de ejemplo de Apple: Son Of Grab. Luego compárelo y ejecútelo, y tendrá una aplicación interactiva muy útil para investigar todas las ventanas que conoce el servidor de ventanas.

La respuesta a su pregunta es que las ventanas se ordenan una detrás de la otra, pero hay muchos más elementos de interfaz de usuario definidos como ventanas de lo que esperaba. Esto incluye la barra de menú, el dock, el menú de servicios, el Escritorio, etc. Estos están definidos en diferentes niveles, correspondientes a kCGWindowLayer en su salida.

desea que la primera ventana definida a nivel de ventana estándar (cero). Y si mira su salida, la primera ventana con kCGWindowLayer == 0 es, de hecho, la 7ma.

1

SystemUIServer es la barra de menú superior. Dock es el Dock (generalmente en la parte inferior de la pantalla). No estoy familiarizado con "Magic Mirror". Puede buscar la información en su sistema con lsregister:

`locate lsregister` -dump 

Buscar la salida de "espejo mágico".

+0

Gracias por la entrada. Pero, ¿cómo puedo obtener la ventana frontal que el usuario puede ver? Obviamente no puedo ver el SystemUIServer, y para el usuario la ventana más frontal se llama 'test'. Entonces, ¿cómo puedo obtener esto? En la lista que proporcioné, está clasificada 7ma. – user635064

Cuestiones relacionadas