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

3

Dado un archivo AppleScript diseñado para sondear un cuadro de diálogo de aplicación cada 30 segundos, ¿cómo puedo configurar fácilmente mi sistema operativo Mac para que este archivo AppleScript comience cada vez que inicie sesión silenciosamente en segundo plano?

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

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 script anterior funciona, pero si alguien puede pensar en una mejor manera de hacer clic automáticamente en un cuadro de diálogo sin escribir un AppleScript que sondea cada pocos segundos, siéntase libre de ofrecer tal solución en los comentarios. Sin embargo, principalmente, me gustaría saber cuál es la mejor manera de administrar AppleScripts diseñados para ejecutarse de manera continua para que puedan habilitarse / inhabilitarse y iniciarse sin ser vistos al iniciar sesión automáticamente.

    
pregunta sean2078 22.06.2015 - 04:19

4 respuestas

6

En mi opinión, la mejor manera de hacerlo es mediante el uso del programador de tareas de Apple: launchd , porque no es necesario instalar software de terceros. Primero, la teoría: para ejecutar un script desde la línea de comandos, simplemente ejecuta:

osascript /PATH/TO/YOUR/script.scpt

Sabiendo esto, todo lo que tienes que hacer es crear un archivo plist 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 archivo plist no importa, pero debería estar en ~/Library/LaunchAgents/ . Además, asegúrate de cambiar /PATH/TO/YOUR/SCRIPT en consecuencia.

Finalmente, solo debes decirle a launchd que quieres que esta secuencia de comandos se ejecute siempre. Para hacer eso, simplemente hazlo:

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

y ya está! Si parece que el script no se inició, puedes hacer esto:

 launchctl start air-mail-beta.job

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

Finalmente, si alguna vez necesitas deshabilitar el script, no te olvides de unload it con:

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

Sé que esta solución es más técnica, pero créeme, esa es una mejor manera de resolver su problema. Si tiene alguna pregunta, solo pregunte!

    
respondido por el LaX 22.06.2015 - 16:31
1

Paso uno:

Al guardar la secuencia de comandos en el editor de secuencias de comandos, guárdela como un paquete de aplicaciones, luego agréguela a los elementos de inicio en las preferencias del sistema de inicio de sesión.

Paso dos "Fondo"

Use una aplicación iBackground Scripts para Mac

  

Simplemente arrastre y suelte un AppleScript guardado como un   'Paquete de aplicaciones' en esta gota. Haciendo clic en el botón 'Sí'   configurará su secuencia de comandos para ejecutarse en segundo plano y no se mostrará en   el muelle

    
respondido por el Buscar웃 22.06.2015 - 05:08
1

Tuve este mismo problema. Estaba intentando hacer clic en el botón "OK" en kontakt en segundo plano mientras utilizaba mi computadora. Esto terminó trabajando 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
    
respondido por el curtified 20.10.2018 - 20:50
0

Puedes agregar una rutina de parada a tu script de fondo. Luego escribe otro script para invocar el tope de su rutina de fondo ... Se requiere algún 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
    
respondido por el historystamp 17.12.2018 - 04:17

Lea otras preguntas en las etiquetas