2009-06-03 13 views
13

me gustaría obtener la lista de aplicaciones que se ejecutan en el mismo orden en que aparecen cuando se hace ⌘ + ⇥Obtener la lista de aplicaciones en ejecución ordenados por último uso

es decir, si uso TextEdit, entonces de vista previa, entonces iCal, el orden es

  1. iCal
  2. de vista previa
  3. TextEdit

Usando [[NSWorkspace sharedWorkspace] launchedApplications] no funciona como se ordenan las aplicaciones por fecha de lanzamiento/identificación del proceso. Enumerar con GetNextProcess tampoco funciona, ya que también está ordenado por pid.

Registrarse para recibir notificaciones y mantener una lista yo mismo no es una opción, ya que debo conocer la lista justo después de que se inicia la aplicación. Bueno, el primer elemento de la lista sería suficiente en realidad, pero creo que es más o menos la misma pregunta.

¿Hay alguna API disponible para obtener esta información?

Respuesta

18

Tal vez algo como esto:

cd /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework 
nm LaunchServices | grep __LSCopyApplicationArrayInFrontToBackOrder 
+0

Genial, funciona exactamente como se esperaba. Es una pena que no se presente como una API de LaunchServices documentada. – 0xced

+9

Y así es cómo para usar _LSCopyApplicationArrayInFrontToBackOrder con seguridad: http://gist.github.com/163918 – 0xced

3

Debe registrarse para recibir notificaciones cuando los cambios en las aplicaciones activas, como se indica aquí: http://www.unsanity.org/archives/000045.php

Una vez hecho esto, es fácil de mantener una gran variedad de aplicaciones activas ordenados por última vez activo.

+0

Enlace no disponible más - Sería bueno si el código está aquí ...: - * ( – jQwierdy

2

Es imposible obtener la lista antes de que se inicie la aplicación. Sin embargo, después de iniciar la aplicación, puede registrarse para recibir notificaciones y mantener su propia matriz de aplicaciones.

La única solución es iniciar un proceso en segundo plano al iniciar sesión usando launchd que simplemente escucha las aplicaciones.

1

Trate de enumerar la lista de ventanas con la accesibilidad o CGWindowList API. Las aplicaciones no son ventanas en Mac OS X, ya que estoy seguro de que lo sabe, pero el orden de las solicitudes de adelante a atrás debe determinarse por el orden de las ventanas frontales.

Por supuesto, deberá ignorar los procesos desde los que ya ha visto Windows (es decir, solo considerar sus ventanas principales).

+1

Desafortunadamente, esta solución no funcionará porque, como usted dijo, las aplicaciones no son ventanas y no se puede encontrar una aplicación sin ventana con este método. , el orden de adelante hacia atrás puede ser correcto si solo tiene un espacio, pero no funciona con múltiples espacios. – 0xced

Cuestiones relacionadas