1 votos

¿Cómo creo una secuencia de comandos de Apple que alterna entre abrir y cerrar una aplicación?

Me gustaría crear un archivo ejecutable que abre una aplicación si no está abierto actualmente, y se cierra la aplicación si ya está abierto.

También me gustaría la ventana de la aplicación se oculta después de que se abre.

Ya he averiguado que el terminal de comandos osascript -e 'tell application "Finder"' -e 'set visible of process "KeyboardCleanTool" to false' -e 'end tell'

ocultar una aplicación después de que se abra, por lo que este comando también se necesita para ser integrado en el archivo ejecutable.

La aplicación se llama KeyboardCleanTool y se almacena en /Applications/KeyboardCleanTool.app

(macOS Catalina)

2voto

qarma Puntos 71

Sería más aconsejable para crear la aplicación desde dentro del Editor de secuencias de Comandos como un verdadero AppleScript aplicación escrita en AppleScript; o para crear un shell script ejecutable del programa que está escrito en shell script sin necesidad de llamar a osascript. No hay nada de malo per se sobre la mezcla para arriba, y de hecho hay un montón de situaciones donde es necesario o útil, pero este no es uno como ambos lenguajes tienen sus propios mecanismos para hacer lo que usted necesita. Te voy a mostrar tanto los scripts de ejemplo:

AppleScript

En primer lugar, me gustaría recomendar la ejecución de una línea rápida de AppleScript para obtener el identificador del paquete de KeyboardCleanTool, que es una forma de permitir AppleScript para hacer referencia a una aplicación sin tener que iniciar la aplicación como un resultado sin una petición explícita para hacerlo (algunas aplicaciones lo hacen porque su diccionario de AppleScript sólo vale para ser leído por AppleScript si la aplicación se está ejecutando).

Así, ejecutar esta línea, entonces usted puede disponer de ella después de tomar nota del resultado:

return the id of the application named "KeyboardCleanTool"

Probablemente va a ser algo como "com.hegenberg.KeyboardCleanTool". Eso es lo que voy a usar en el siguiente script, que puede reemplazar con la correcta identificador del paquete:

property id : "com.hegenberg.KeyboardCleanTool"
property A : a reference to application id id

if A is running then return quit A
run A

Hay tres maneras de abrir aplicaciones usando AppleScript, cada uno con diferentes resultados:

  • activate abre la aplicación, se la trae al primer plano, y le da importancia;
  • launch la aplicación se abre y revela el windows pero no poner en el primer plano, ni le da importancia. Las ventanas se oculte detrás de cualquier aplicación que actualmente tiene el foco, y posiblemente otros (no recuerdo completamente, pero la recién lanzada aplicación podría sentarse en la parte de atrás de la solicitud de orden z);
  • run abre la aplicación pero tampoco nos muestra su windows ni le da importancia. Para aplicaciones que no tienen ni un dock ni el icono de la barra de menú, usted no se dará ninguna señal de que se ha abierto. Este es el comando que suena como usted desea.

El uso de tell application "Finder" to set visible of process "KeyboardCleanTool" to false no es un gran método. En primer lugar, usted no debería usar el Finder para el control de la interfaz gráfica de usuario, que es lo que está haciendo esto; utilizar los Eventos del Sistema, que fue creado específicamente para tomar el trabajo lejos del Buscador porque el Buscador no puede incluso hacer su propio trabajo de manera adecuada sin tener una fundir, mucho menos tratando de dar prioridad a las llamadas para manipular la interfaz de usuario.

También requiere permisos adicionales que estoy seguro de que ya has hecho, pero es que vale la pena mencionar para otros usuarios que no deseen hacerlo.

Por último, si usted no necesita llamar en ayuda externa para hacer algo, es mucho más ventajoso (más rápido, más eficiente, menos exigente en recursos) para el uso de un medio ya adquirida por el núcleo de secuencias de comandos.

Para crear una Aplicación usando el script de arriba: Guardar la secuencia de comandos en el Editor de secuencias de Comandos, seleccionar el tipo de la lista desplegable en el cuadro de diálogo Guardar que se llama algo así como "el paquete de la Aplicación" o "AppleScript Applet". Usted sabrá cuando usted ve las cuatro opciones. Se puede guardar en cualquier lugar que te gusta, pero un sub-directorio en tu carpeta de aplicaciones podría ser una buena opción, es decir, ~/Applications, o la root de la carpeta de aplicaciones, /Applications , si lo prefiere.

Secuencia de Comandos de Shell, por ejemplo bash

Déjeme saber si usted utiliza un shell de otros que bash, y soy consciente de que Catalina está empaquetado con zsh y yo, yo mismo, utilizar preferentemente Fish y recomendamos echarle un vistazo.

El bash script para la tarea a la mano puede ser este:

pkill -i 'KeyboardCleanTool' || lsappinfo launch nofront=true async=true /Applications/KeyboardCleanTool.app

Esto puede ser guardado como cualquier cosa que te gusta, y lo ideal en un directorio que aparece en su $PATH variable de entorno, tales como _/usr/local/bin. Será también deben ser ejecutable. Tomando el script de arriba, aquí está toda la bash de código que va a hacer todo esto:

echo '#!/usr/bin/env bash

A="${1-KeyboardCleanTool}" # Default app name if none given
[[ -e "${fp="/Applications/$A.app"}" ]] || fp="$( locate -l 1 -i "*/$A.app" )"
pkill -i "$A" || lsappinfo launch nofront=true async=true "$fp"' > /usr/local/bin/rd; chmod +x /usr/local/bin/rd

Una vez que haya terminado, usted puede invocar el programa como este:

rd textedit           # Will run or quit TextEdit
rd keyboardcleantool  # Will run or quit KeyboardCleanTool
rd                    # (Default) Will run or quit KeyboardCleanTool

Y, por supuesto, usted no necesita guardar el programa en /usr/local/bin. Guardar en el principal /Applications carpeta está perfectamente bien. Tendrá un icono que representa una Terminal de shell, pero se puede tratar como cualquier otra aplicación: haga doble clic para ejecutar desde dentro del Buscador y se cerrará cuando se hace.

1voto

Tetsujin Puntos 23061

Esto es bastante simple si (en ejecución) sale, de lo contrario, inicie la estructura.
Tendría que dejar el Script.app en algún lugar donde pueda encontrarlo con el mouse, ya que KeyboardCleanTool, por supuesto, desactivará la entrada del teclado por completo si está configurado para iniciar el modo de limpieza automáticamente en el inicio.

 set appName to "KeyboardCleanTool"

if application appName is running then  
    tell application id (id of application appName) to quit
    return "Quit"
else
    tell application appName  to activate
    tell application "Finder" to set visible of process appName to false
    return "Launch & hide"
end if
 

Las devoluciones son solo para depurar. Puedes dejarlos afuera.

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