4 votos

¿Por qué mi servicio de Automator funciona en Automator pero no cuando se llama desde el sistema operativo?

He hecho un servicio de Automator que ejecuta un Applescript con el Run Applescript módulo. Este es el script:

# Press ^F8
tell application "System Events"
    key code 100 using control down
end tell

delay 0.1

# Press "down"
tell application "System Events"
    key code 125
end tell

delay 0.1

# Press ^F9
tell application "System Events"
    key code 101 using control down
end tell

Cuando tengo el servicio abierto en Automator y pulso Workflow -> Run todo funciona como debería. Sin embargo, cuando abro el servicio desde la barra de menús, es decir, en Safari, yendo a Safari -> Services -> script name no pasa nada. No se escribe nada en la consola, así que no puedo averiguar por qué no funciona el servicio. ¿Cómo puedo localizar el error y hacer que el servicio se ejecute fuera de Automator?

0 votos

Hola, ¿Es esto para la pantalla de bloqueo

0 votos

Sí que lo es. He visto tu comentario sobre que este método es un acierto y sospecho que esa es la razón por la que no funciona.

2voto

¿Qué es lo que se pretende ⌃F9? Esto me funcionó cuando lo envolví en un servicio:

tell application "System Events"
    key code 100 using control down -- ^F8
    delay 0.1
    key code 125 -- down
    key code 125
    keystroke return
end tell

Puede intentar ejecutar el flujo de trabajo con automator -v :

$ automator -v ~/Library/Services/lock.workflow/
Starting Automator…
Run AppleScript is running

Run AppleScript is finished

The Automator workflow has completed.

Sin embargo, hay varios problemas con el uso de los servicios de Automator para asignar accesos directos a scripts. Ver esta pregunta . Si ejecuta el servicio con un acceso directo que tiene teclas modificadoras, es posible que no haya tiempo suficiente para liberarlas antes de los comandos de código de teclas.

También puedes usar un script como este:

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 where description is "Keychain menu extra") of menu bar 1
        click
        click menu item 1 of menu 1
    end tell
end tell

1voto

Kaydell Puntos 229

Utilizar la herramienta adecuada para el trabajo adecuado

  1. Podrías intentar añadir un pitido a tu AppleScript para escuchar si está siendo llamado.

  2. He tenido Servicios que no se ejecutan antes cuando hay dos cosas que intentan usar las mismas combinaciones de teclas. Podrías intentar añadir más teclas modificadoras para que el conflicto sea menos probable (para probar y depurar).

  3. Cuando veo un código que depende de llamar al comando llamado "delay", me da la sensación de que el código no siempre va a funcionar.

  4. AppleScript fue concebido por Apple para ser una interfaz de usuario alternativa, una alternativa al ratón y al teclado que utiliza AppleEvents para realizar la comunicación entre aplicaciones de proceso (IAC). Creo que puedes querer usar AppleScript y Automator Services para tener una GUI con la que trabajar, pero me parece probable que debas usar algo de menor nivel que AppleScript y AppleEvents para lo que estás haciendo.

Por lo tanto, estoy hablando de añadir algún tipo de shell script a la mezcla para que todo funcione de forma fiable.

--- Editar ---

Ya que @markhunte ha criticado mi respuesta por no ser realmente una respuesta, intentaré hacerlo mejor.

  1. Te sugerí que pusieras algunas llamadas a "bip" en tu AppleScript para depurar si tu script estaba siendo llamado o no. Lo he intentado y no ha funcionado.

Encontré el siguiente enlace que habla de hacer tu propia función de registro. Creo que eso funcionará mejor. http://hints.macworld.com/article.php?story=2004121710493371

Aquí está mi versión del código para hacer su propio registro utilizando AppleScript, por lo que deduzco, la función de registro que se construye en AppleScript sólo muestra los resultados en la parte inferior del editor de AppleScript Windows, y creo que el registro del sistema es difícil de entender. Esta función de registro me funciona, de hecho lo he probado:

on logToFile(themessage)
    if themessage is equal to "" then
        set theLine to ""
    else
        set theLine to (do shell script "date  +'%Y-%m-%d %H:%M:%S'" as string) & " " & themessage
    end if
    do shell script "echo " & theLine & " >> ~/Library/Logs/AppleScript-events.log"
end logToFile

on run {input, parameters}

    logToFile("")
    logToFile("Entering Lock Keyboard Service")

    set F8 to 100
    set F9 to 101
    set DOWN_ARROW to 125

    # Press ^F8
    logToFile("About to simulate control-F8")
    tell application "System Events"
        key code F8 using control down
    end tell

    delay 0.1

    # Press "down"
    logToFile("About to simulate down-arrow")
    tell application "System Events"
        key code DOWN_ARROW
    end tell

    delay 0.1

    # Press ^F9
    logToFile("About to simulate control-F9")
    tell application "System Events"
        key code F9 using control down
    end tell

    logToFile("Exiting Lock Keyboard Service")

    return input
end run

He envuelto el código en un

on run
end run

porque el código parecía funcionar mejor para mí de esa manera.

Además del registro, para depurar, podrías intentar usar algunos caracteres visibles como "A", "B" y "C" y podrías ver si se están escribiendo en Safari.

Una idea más para ti. Cuando probé por primera vez el script, la tecla F8 estaba atada a algo. Tuve que ir a Preferencias del Sistema > Teclado > Atajos de teclado y desatar la combinación de teclas ^F8 de lo que estaba atado. (Esto es como lo que dije en mi primera respuesta que creo que tenía algunas buenas ideas como probar diferentes combinaciones de teclas).

Aquí hay un enlace a una captura de pantalla. Está en mi carpeta pública de Dropbox. Hazme saber si puedes verlo ya que estoy probando a compartir enlaces usando Dropbox.

https://www.dropbox.com/s/jm3smqa4g5v2k33/KeyboardShortcuts.png

¿Qué es lo que intenta hacer? ¿Bloquear un teclado con esta secuencia de combinaciones de teclas?

El flujo de trabajo sí me funcionó en Safari (después de cambiar la tecla control-F8 en los Atajos de teclado en las Preferencias del sistema) y en Safari, sí me salió una tecla de bajada, pero el teclado no se bloqueó. ¿Requiere esto una pieza adicional de software para que funcione?

kaydell@learnbymac.com

--- Editar ---

He añadido la página man del comando "automator" a mi página web que está en pañales.

página man para el comando automator http://learnbymac.com/doc/unix/automator.man.html

--- Editar ---

Tengo algunas ideas más para ti:

  1. En las Preferencias del Sistema, hay algunas preferencias para habilitar características que te ayudan (al menos durante la depuración).

A. Hay "sticky keys" que permite que una tecla modificadora se pegue y no se vaya tan rápido, eso podría ayudar. No lo sé.

http://learnbymac.com/images/screen_shots/StickyKeys.png

B. Hay una opción para que se muestre una imagen en la pantalla (y se reproduzca un sonido) cuando se detecta una tecla modificadora.

http://kaydell.us/learnbymac/images/screen_shots/DisplayPressedModifierKey.png

  1. Puede utilizar un programa especialmente diseñado para definir combinaciones de teclas. Hace años, solía utilizar un programa llamado QuicKeys. Parece que ahora tienen menos soporte para Mac, pero podrías buscar en Google "Alternativas a QuicKeys" si eso te sirve para que otro programa se encargue de definir los equivalentes del teclado.

P.D.: Acabo de desactivar todas esas preferencias de las Preferencias del Sistema de Accesibilidad, no soporto usarlas (tal vez algunas estarían bien, pero creo que el "Sticky Keys" estaba causando que mi Caps Lock se pegara al escribir todo en mayúsculas :( ).

http://kaydell.us/learnbymac/images/screen_shots/DisplayPressedModifierKey.png

Lo mejor sería utilizar Spark.app para manejar los equivalentes de las teclas de comando
http://www.shadowlab.org/Software/spark.php

0 votos

Esto no es realmente una respuesta a la pregunta. Es más bien un comentario

0 votos

DE ACUERDO. He añadido algo a mi respuesta.

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