Estoy tratando de escribir una secuencia de comandos de applescript que cambia el tamaño de todas las ventanas abiertas. Con el fin de asegurarse de que estoy llegando a todos los windows, estoy haciendo mi script decir el nombre de la aplicación, así como el número de ventanas abiertas de esa aplicación.

Curiosamente, mientras escucho los nombres de todos mis aplicaciones, mi script dice que todos ellos tienen 0 ventanas abiertas. ¿Cómo puedo solucionar este problema?

Aquí está mi código:

tell application "System Events"
    repeat with theProcess in (every process)
        if background only of theProcess is false then
            if name of theProcess is not "Finder" then
                if name of theProcess is "Google Chrome" then
                    say "Chrome woo hoo"
                    say (count windows as string)
                else
                    say name of theProcess as string
                    say (count windows as string)
                    tell theProcess
                        repeat with theWindow in windows
                            say "found a window of"
                            say (name of theProcess) as string
                            tell theWindow
                                click button 2
                            end tell
                        end repeat
                    end tell
                end if
            end if
        end if
    end repeat
end tell

Estoy en Mac OS X 10.7.5, el uso de automator 2.2.4 escribir/ejecutar applescript

  • A menos que la aplicación está consultando ha explícito apoyo para hacer frente a cada uno de windows (que es el caso en la mayoría de navegador de aplicaciones como Firefox y Safari, pero probablemente no es el caso en la mayoría de las otras aplicaciones), sospecho que usted necesita tener algún aspecto de la «Accesibilidad» panel de preferencias de encendido con el fin de obtener un identificador para cualquier / todas las ventanas de otras aplicaciones.
  • te gustaría ser capaz de que me señale el valor exacto que tengo que cambiar y en el que prefpane?

2 Comentarios

  1. 6

    Usted tiene que decirle al proceso de recuento de windows. Después de todo es el proceso que se sabe acerca de sus ventanas, no los eventos del sistema.

    Usted ha dicho que el proceso a decir su nombre por ejemplo, «decir el nombre de theProcess como la cadena» sin embargo sólo el uso de «decir (recuento de windows como cadena)»… no hay ningún proceso está ligado a eso. Tratar de «ventanas de recuento de theProcess». Básicamente, usted tiene líneas donde a veces le dicen el proceso, otras veces no, y otras veces donde se le indique el proceso a pesar de que ya les has contado el proceso, por lo que hacerlo dos veces. Que es donde se «dicen que (nombre de theProcess) como la cadena», pero que el código que está dentro de un «informe theProcess» bloque, por lo que ya se le dijo a theProcess.

    Realmente necesita para ir a través de su código y ser más precisos. Un consejo… si usted desea, haga clic en un botón en una ventana, a continuación, la ventana situada en primer plano en la pantalla, de lo contrario no podrá hacer clic en él. Otro consejo… «nombre» ya es una cadena, así que no necesita para obligar a que a una cadena.

    Por cierto, estoy de acuerdo con Michael Dautermann del comentario a tu post… va a ser procesos en los que usted no tendrá acceso. Pero usted encontrará que a medida que avances.

    He aquí cómo yo iba a escribir el código. Básicamente me gustaría conseguir todas las variables al principio el uso de un «informe theProcess de» bloquear. Entonces que puedo hacer cosas con esas variables. Espero que le ayude. Aviso de que he hecho el proceso situada en primer plano lo que significa que si tiene varias ventanas abiertas sólo haga clic en un botón en la ventana del frente. Usted tendrá que agregar el código para hacer que cada ventana de venir al frente, antes de hacer clic en su botón. La buena suerte.

    tell application "System Events"
        repeat with theProcess in processes
            if not background only of theProcess then
                tell theProcess
                    set processName to name
                    set theWindows to windows
                end tell
                set windowsCount to count of theWindows
    
                if processName is "Google Chrome" then
                    say "Chrome woo hoo"
                    say windowsCount as text
                else if processName is not "Finder" then
                    say processName
                    say windowsCount as text
                    if windowsCount is greater than 0 then
                        repeat with theWindow in theWindows
                            say "found a window of " & processName
                            tell theProcess
                                set frontmost to true
                                tell theWindow
                                    click button 2
                                end tell
                            end tell
                        end repeat
                    end if
                end if
            end if
        end repeat
    end tell
    
    • Esta es sin duda una mejora con respecto a mi código. Sin embargo, no reconoce ninguna Google Chrome, Terminal o ventanas de vista previa. ¿Cómo puedo arreglar ese problema?
    • Eso es un problema difícil de solucionar. Algunas aplicaciones pueden tener los documentos en lugar de windows. Algunos pueden ser directamente de secuencias de comandos, por ejemplo de la Terminal, donde usted puede conseguir el windows directamente desde la aplicación. Algunas que no pueden encontrar ninguna solución en absoluto. Sólo tienes que buscar, mirar applescript diccionarios, y tal vez usted puede encontrar otras soluciones. No sé de que es una respuesta directa para usted.
    • Tengo poco o ningún conocimiento de AppleScript, estoy interesado en este problema en concreto – sólo quería decir que en mi editor de secuencias de comandos genera un código de error de 1700 en if not background only of theProcess then, no se puede convertir <<clase bkgo>> de <<clase media luna roja palestina>> Boolean
  2. 3

    Puedo crear una lista de todas las ventanas abiertas de visibilidad de aplicaciones en Mavericks como este:

    tell application "System Events"
        set this_info to {}
        repeat with theProcess in (application processes where visible is true)
            set this_info to this_info & (value of (first attribute whose name is "AXWindows") of theProcess)   
        end repeat
        this_info -- display list in results window of AppleScript Editor 
    end tell
    

    Usted necesita para permitir que cualquier aplicación utilizando este para acceder a la interfaz de bajo nivel de Accesibilidad.

    • esta sólo muestra las aplicaciones en el escritorio actual, hay una manera de incluir a todos los equipos de sobremesa?

Dejar respuesta

Please enter your comment!
Please enter your name here