2011-03-13 18 views
11

Estoy usando este código para obtener el título de la ventana:MacOSX: obtener el título más importante ventana

tell application "System Events" 
    set frontApp to name of first application process whose frontmost is true 
end tell 

tell application frontApp 
    set window_name to name of front window 
end tell 

Sin embargo, esto no funciona en algunos casos. Obviamente, falla cuando no hay una ventana abierta, pero eso está bien. Sin embargo, en algunos casos, por ejemplo para Texmaker, falla con un error. Tampoco funciona para Vista previa.

¿Cuál sería una forma de obtener el título de la ventana de todos modos, incluso para casos como Texmaker?

Respuesta

17

Esto parece funcionar siempre:

global frontApp, frontAppName, windowTitle 

set windowTitle to "" 
tell application "System Events" 
    set frontApp to first application process whose frontmost is true 
    set frontAppName to name of frontApp 
    tell process frontAppName 
     tell (1st window whose value of attribute "AXMain" is true) 
      set windowTitle to value of attribute "AXTitle" 
     end tell 
    end tell 
end tell 

return {frontAppName, windowTitle} 

tomó la idea de here.

+1

Tuve algunos problemas al tratar de adaptar este código para una tarea relacionada, y pensé en señalarlo aquí. Si intentas probar esto en un programa en particular, es posible que tengas que 'decirle a la aplicación processName que se active' primero, para que 'processName' sea de hecho el más adelantado, y AXMain no se equivoque. –

+0

Hola Albert, después de la línea 'establecer windowTitle to ....' Agregué esta línea: 'establecer el nivel a 3' para que sea" siempre en la parte superior ", sin embargo, no hizo nada. ¿Puedes ayudarme con eso? Estoy intentando aplicar este tema - http://www.macscripter.net/viewtopic.php?id=30100 - aquí. – Noitidart

+0

@Noitidart: deberías preguntar eso como una pregunta separada. – Albert

2

Dale el siguiente script intentarlo:

tell application "System Events" 
    set window_name to name of first window of (first application process whose frontmost is true) 
end tell 

no he verificado que funciona para TextMaker, sin embargo.

+0

Ok, funciona para Texmaker pero falla para Vista previa. – Albert

+0

Solo falla para Vista previa si abre una imagen. Funciona para Vista previa si abre un PDF. – Albert

+0

Esto no funciona cuando minimizamos una aplicación en particular. Por ejemplo, si estoy usando el navegador Chrome y si lo minimizo, continuará reportando frontAppName como chrome. O dicho de otro modo, cuando una aplicación se minimiza, el foco permanece en esa aplicación solamente. –

4

edificio fuera de la respuesta de Albert, me gustaría hacer en vez

global frontApp, frontAppName, windowTitle 

set windowTitle to "" 
tell application "System Events" 
    set frontApp to first application process whose frontmost is true 
    set frontAppName to name of frontApp 
    set windowTitle to "no window" 
    tell process frontAppName 
     if exists (1st window whose value of attribute "AXMain" is true) then 
      tell (1st window whose value of attribute "AXMain" is true) 
       set windowTitle to value of attribute "AXTitle" 
      end tell 
     end if 
    end tell 
end tell 

return {frontAppName, windowTitle} 

Este es un truco y no tengo experiencia, pero la ventaja es que no se bloquea si no hay ventana.

Cuestiones relacionadas