2009-12-30 9 views
6

Estoy observando la notificación NSWorkspaceDidDeactivateApplicationNotification para obtener la aplicación que acaba de perder el foco. Estoy terminando con una instancia de NSRunningApplication que se obtiene de la clave del diccionario userInfo - NSWorkspaceApplicationKey - del objeto de notificación.Obteniendo la ventana principal de una aplicación a través de una instancia NSRunningApplication

Estaba pensando que podría obtener la ventana principal de la aplicación de la notificación, pero no estoy seguro de dónde ir desde aquí ya que NSRunningApplication parece bastante limitada. Cualquier ayuda sería apreciada.

BTW - Estoy usando MacRuby pero la respuesta no tiene que ser en MacRuby.

Gracias

Respuesta

4

Apple ha sido tradicionalmente bastante bloqueado sobre este tipo de cosas. NSRunningApplication se acaba de presentar en 10.6, y como dijiste, es un poco limitado. Según lo que desee hacer, la respuesta podría estar en el Accessibility framework o podría ser el CGWindow API. Puede utilizar processIdentifier desde NSRunningApplication para que coincida con esas API.

+0

Gracias, echaré un vistazo a ambas API. – alistairholt

2

Es muy difícil conseguir que la ventana principal de otras aplicaciones; ¡Ni siquiera se garantiza que sean Cocoa! Pueden ser Carbon o Java, o Qt, o Mono ... Así que no hay forma de que puedas obtener NSWindow de otra aplicación, a menos que hagas un hack. Puede intentar Accessibility API para obtener la información de la ventana, etc. de otras aplicaciones independientemente del marco utilizado, pero no es tan fácil de usar.

+0

Gracias, veré la API de accesibilidad. – alistairholt

1

A menos que la aplicación opte por participar en IAC a través del soporte de AppleScript u otros medios, simplemente no toca sus ventanas o cualquier otra cosa fuera de su propio espacio de almacenamiento dinámico.

Cuestiones relacionadas