2 votos

No se puede imprimir el punto ('.') desde AppleScript simple a la máquina virtual VMware Fusion

Así que tengo un simple AppleScript que creo que debería escribir un montón de teclas, pero el carácter de punto no se imprime en las máquinas virtuales de VMware Fusion. Esto es extraño porque mi tecla de punto ( . ) entra en un periodo como el normal en esas VM.

MCVE

Aquí está mi última versión que he probado:

on run {input, parameters}

    set file_text to "this another test: ... hello ..."
    delay 0.3
    repeat with ch in file_text
        tell application "System Events" to keystroke ch
        delay 0.1
    end repeat

    return input
end run

Construí esto como un servicio en Automator. Lo ejecuto yendo a mi aplicación, luego en la barra de título selecciono Servicios -> quicktype.

Comportamiento esperado

Sólo debería escribir el texto this another test: ... hello ... . En muchas aplicaciones, hace exactamente eso.

Comportamiento real

En una VM de FreeBSD, pulsando . hace un punto en la cáscara (como es normal). Sin embargo, cuando se ejecuta el anterior script, los puntos parecen espacios en blanco. Resultado final: FreeBSD after running script

En una máquina virtual de Windows, . hace un punto en el Bloc de notas (como es normal). Sin embargo, cuando se ejecuta el anterior script, los puntos parecen ser ignorados por completo. Resultado final: Windows Notepad after running script

Preguntas

¿Hay alguna manera de verdaderamente emular la pulsación de las teclas de una cadena de caracteres en AppleScript? Porque está claro que la forma anterior no lo hace.

¿Alguien sabe por qué se produce el comportamiento que he descrito anteriormente? ¿Por qué esto funciona en TextMate y Terminal, y otras aplicaciones de mac, pero no en Fusion VMs?

1voto

Greg Schmit Puntos 133

No entiendo por qué no funciona, pero tengo una solución. He descubierto que haciendo tell application "System Events" to key code 47 envía un punto correctamente.

Así que envolví mi lectura en un condicional como este:

on run {input, parameters}

    #set input_file to "/path/to/file"
    #set file_text to read input_file
    set file_text to "test: ... hello ..."
    delay 0.3
    repeat with ch in file_text
        if ch as string = "." then
            tell application "System Events" to key code 47
        else
            tell application "System Events" to keystroke ch
        end if
        delay 0.1
    end repeat

    return input
end run

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