8 votos

¿Cómo ejecutar un AppleScript personalizado en segundo plano en todo momento?

Teniendo en cuenta un archivo AppleScript diseñado para sondear un cuadro de diálogo de una aplicación cada 30 segundos, ¿cómo puedo configurar fácilmente mi Mac OS para que este archivo AppleScript se inicie cada vez que inicie una sesión de forma silenciosa en segundo plano?

El código para el script ( en caso de estar interesado ) se encuentra a continuación, y está diseñado para pulsar "Más tarde" en la aplicación AirMail Beta:

repeat
    if (exists application "AirMail Beta") then
        tell application "System Events" to tell process "Airmail Beta"
            if exists (button "Later" of front window) then
                click (button "Later" of front window)
            end if
        end tell
    end if
    delay 30
end repeat

El anterior script funciona, pero si a alguien se le ocurre una forma mejor de hacer auto-click en un diálogo sin escribir un AppleScript que haga un sondeo cada pocos segundos, que se sienta libre de ofrecer tal solución en los comentarios. Principalmente, sin embargo, me gustaría saber la mejor manera de gestionar los AppleScripts diseñados para ejecutarse de forma continua para que puedan ser activados / desactivados y se inicien sin ser vistos en el inicio de sesión automáticamente.

10voto

sisi Puntos 21

En mi opinión, la mejor manera de hacerlo es utilizando el propio programador de tareas de Apple: launchd porque no necesitas instalar software de terceros. Primero, la teoría: para ejecutar un script desde la línea de comandos, basta con ejecutar:

osascript /PATH/TO/YOUR/script.scpt

Sabiendo esto, todo lo que tienes que hacer es crear un plist archivo en ~/Library/LaunchAgents/ con esto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>air-mail-beta.job</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/osascript</string>
        <string>/PATH/TO/YOUR/SCRIPT</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

El nombre del plist no importa, pero debe estar en ~/Library/LaunchAgents/ . Además, asegúrese de cambiar /PATH/TO/YOUR/SCRIPT en consecuencia.

Por último, sólo tiene que decir launchd que desea que este script se ejecute siempre. Para ello, sólo tienes que hacer:

launchctl load -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist

¡y ya está! Si parece que el script no se ha iniciado, puedes hacer esto:

 launchctl start air-mail-beta.job

donde air-mail-beta.job es la propiedad bajo <key>label</key> que hemos establecido en el plist archivo.

Por último, si alguna vez necesitas desactivar el script, no olvides unload con:

launchctl unload -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist

Sé que esta solución es más técnica, pero créeme, es una mejor manera de tratar tu problema. Si tienes alguna duda, ¡pregúntame!

0 votos

Gracias por esta solución. ¿Puede el nombre de la .job ser cualquier cosa en el .plist ¿archivo? He intentado hacer un archivo .plist y parece que carga con éxito el .plist con launchhd , pero el propio script no parece iniciarse. No obtengo ninguna respuesta en el Terminal al hacer launchctl después. Sé que el script funciona porque si simplemente hago osascript /PATH/to/script.scpt hace lo que se supone que debe hacer.

0 votos

Experimentando exactamente el mismo problema que @Winterflags

1voto

Buscar웃 Puntos 23467

Primer paso:

Al guardar el script en el editor de script, guárdelo como un paquete de aplicaciones y añádalo a los elementos de inicio en las preferencias del sistema de inicio de sesión.

Segundo paso "Antecedentes"

Utiliza una app iBackground scripts para Mac

Basta con arrastrar y soltar un AppleScript que se haya guardado como paquete de aplicaciones' en este droplet. Al hacer clic en el botón "Sí hará que su script se ejecute en segundo plano y no se muestre en el Dock

0 votos

No estoy seguro de cómo funciona iBackground, pero dependiendo de la configuración que cambie en el info.plist del script guardado, la aplicación puede ejecutarse en segundo plano, lo que significa que no puede salirse de ella fácilmente, ya que ahora actúa como un proceso y no se muestra la guía.

0 votos

Puedes revertirlo haciendo clic en el botón 'No' y dejará de ser un script y se mostrará en el Dock. Si no ves el cambio inmediatamente, mueve el AppleScript a otra ubicación (Comando+arrastrar).

0 votos

¿Estás confirmando que si quieres dejarlo no puedes hacerlo a través de la GUI si usas esta aplicación para hacer el cambio a una aplicación de fondo?

1voto

curtified Puntos 21

Yo tuve este mismo problema. Intentaba pulsar el botón "OK" en kontakt en segundo plano mientras usaba mi ordenador. Esto terminó funcionando para mí.

tell application "System Events"
    if exists of application process "Kontakt 5" then
        tell application "Kontakt 5.6.0" to activate
        delay 0.5
        repeat
            try
                click UI element "OK" of window 1 of application process "Kontakt 5"
            end try
        end repeat
    end if
end tell

0voto

Kerry Puntos 100

Podrías añadir una rutina de parada a tu script. Luego escribes otro script para invocar el stop de tu rutina de fondo... Se requiere algo de ensamblaje.

cómo invocar el stringSet en la declaración de otro script:

on run
    set myApp to "/Applications/applescriptFiles/demo -- the best/b.app"
    -- some hocus pocus is nesessary to avoid applescript from change path.
    -- set myApp to POSIX file myApp

    tell application myApp

        launch
        stringSet("stringie set") -- this function is in the "b" app.
    end tell
end run

(* 

save this as an application bundle 

invoked by a.app.  

twtwtw write in:
https://discussions.apple.com/thread/4917321?start=15&tstart=0

hocus-pocus: 

Give your script application a unique bundle id string (CFBundleIdentifier) and a unique bundle name (CFBundleName) too, to make life easier.  You set those in the info.plist file.  Launch the script app once to register it with launch services, and system will be able to find it thereafter.

Example:
      <key>CFBundleIdentifier</key>
      <string>com.rccharles.b</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>b</string>

    I added the CFBundleIdentifier info above the CFBundleInfoDictionaryVersion line. I left the CFBundleInfoDictionaryVersion and CFBundleName as is.

    *)

property myVar : "initial value"

on run
    display dialog myVar
end run

on stringSet(inputVar)
    set myVar to inputVar
    display dialog "variable myVar is " & myVar
end stringSet

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