0 votos

¿Cómo cambiar constantemente a la ventana principal (primera) de una aplicación con applescript?

Necesito centrarme constantemente en la primera ventana de una aplicación, ya que tiene dos abiertas y sus nombres cambian por lo que me pregunto si esto es posible, sin navegar por el menú de aplicaciones.

Actualmente lo de abajo no funciona si la segunda ventana estaba previamente activa (sobre la ventana principal), ya que deben activarse siempre en la primera ventana.

tell application "System Events" to tell application process "Microsoft Teams"
    set frontmost to true
    key code 44 using {command down}
    keystroke "dnd"
    key code 76
end tell

EDITAR: AXRaise de la primera (o última) ventana no parece funcionar tampoco, ya que es sólo la primera de la lista la que cambia según qué ventana fue la última activa por lo que tengo entendido. Espero que haya otra manera.

perform action "AXRaise" of first window of process "Microsoft Teams"

Para tu información, yo también estaba buscando una solución para lo contrario dirigirse a la última (segunda) ventana pero no he podido encontrar una solución sin usar el menú (o el menú del dock).

EDIT: como user3439894 sugirió que puede ser capaz de utilizar diferentes propiedades atributo si el id de la ventana no se proporciona. El único diferenciador que veo es el título en la lista de abajo donde la primera ventana siempre parece terminar con "| Microsoft Teams [QSP]"

{
{minimum value:missing value, orientation:missing value, position:{4088, 45}, class:window, accessibility description:missing value, role description:"standard window", focused:false, title:"testing | Microsoft Teams", size:{1350, 844}, help:missing value, entire contents:{}, enabled:missing value, maximum value:missing value, role:"AXWindow", value:missing value, subrole:"AXStandardWindow", selected:missing value, name:"testing | Microsoft Teams", description:"standard window"}, 

{minimum value:missing value, orientation:missing value, position:{4068, 25}, class:window, accessibility description:missing value, role description:"standard window", focused:false, title:"Calendar | Microsoft Teams [QSP]", size:{1095, 645}, help:missing value, entire contents:{}, enabled:missing value, maximum value:missing value, role:"AXWindow", value:missing value, subrole:"AXStandardWindow", selected:missing value, name:"Calendar | Microsoft Teams [QSP]", description:"standard window"}
}

1voto

user3439894 Puntos 5883

Como no tengo Microsoft Teams Así que ofrezco esto como una prueba para ver si funciona.

Ejemplo AppleScript código :

tell application "System Events"
    tell application process "Microsoft Teams"

        if name of window 1 does not end with "| Microsoft Teams [QSP]" then
            set windowName to name of window 2
        else
            set windowName to name of window 1
        end if

        perform action "AXRaise" of window windowName
        set frontmost to true
        key code 44 using {command down}
        keystroke "dnd"
        key code 76

    end tell
end tell

Notas:

El ejemplo AppleScript código supone que los dos Windows tendrá un único nombres .


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>intente </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso del <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

0voto

Markus Puntos 133

He conseguido crear una solución a través del menú de la aplicación buscando la cadena de nombres, pero si hay una utilizando el nombre de las propiedades También me interesaría eso que sugirió "user3439894". También me pregunto si eso puede ser más eficiente. Lo siguiente funciona.

tell application "System Events" to tell application process "Microsoft Teams"
    click (menu items of menu 1 of menu bar item "Window" of menu bar 1 whose name contains "QSP")
end tell

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X