Dado un archivo AppleScript diseñado para buscar 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 se inicie cada vez que inicie sesión en segundo plano?
El código para el script (en caso de que esté interesado) se incluye a continuación y está diseñado para hacer clic en "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 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 sondee cada pocos segundos, siéntase libre de ofrecer esa solución en los comentarios. Principalmente, sin embargo, me gustaría saber cuál es la mejor manera de administrar los AppleScripts diseñados para ejecutarse continuamente, de modo que puedan habilitarse/deshabilitarse e iniciarse sin que se vean al iniciar sesión automáticamente.
En mi opinión, la mejor manera de hacerlo es usando el 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 comando, simplemente ejecute:
osascript /PATH/TO/YOUR/script.scpt
Sabiendo esto, todo lo que tienes que hacer es crear un plist
archivo ~/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
archivo no importa, pero debe estar en formato ~/Library/LaunchAgents/
. Además, asegúrese de cambiar /PATH/TO/YOUR/SCRIPT
en consecuencia.
Finalmente, solo necesita decir launchd
que desea que este script se ejecute siempre. Para hacer eso, solo tienes que hacer:
launchctl load -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist
¡y tu estas listo! Si parece que el script no se inició, puede hacer esto:
launchctl start air-mail-beta.job
donde air-mail-beta.job
está la propiedad debajo <key>label</key>
de la que hemos establecido en el plist
archivo.
Finalmente, si alguna vez necesita deshabilitar el script, no olvide hacerlo unload
con:
launchctl unload -w ~/Library/LaunchAgents/NAME-OF-YOUR-PLIST.plist
Sé que esta solución es más técnica, pero confía en mí, es una mejor forma de solucionar tu problema. ¡Si tienes alguna pregunta solo pregunta!
Paso uno:
Al guardar el script en el editor de scripts, guárdelo como un paquete de aplicaciones y luego agréguelo a los elementos de inicio en las preferencias del sistema de inicio de sesión.
Paso dos "Antecedentes"
Utilice una aplicación iBackground Scripts para Mac
Simplemente arrastre y suelte un AppleScript que se haya guardado como un 'paquete de aplicaciones' en este droplet. Al hacer clic en el botón 'Sí', la secuencia de comandos se configurará para que se ejecute en segundo plano y no se mostrará en el Dock.
Tuve el mismo problema. Estaba tratando de hacer clic en el botón "Aceptar" en kontakt en segundo plano mientras usaba mi computadora. 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
Puede agregar una rutina de parada a su script de fondo. Luego escribe otra secuencia de comandos para invocar el tope de su rutina en segundo plano... Se requiere algo de ensamblaje.
cómo invocar la instrucción stringSet on 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
CACEROLA
.job
ser cualquier cosa en el.plist
archivo? Intenté crear una configuración personalizada.plist
y parece cargar con éxito el.plist
withlaunchhd
, pero el script en sí no parece iniciarse. No recibo comentarios en la Terminal cuando lo hagolaunchctl
después. Sé que el script funciona porque si simplementeosascript /PATH/to/script.scpt
lo hago, hace lo que se supone que debe hacer.Sándwich