1 votos

¿Agilizar la automatización de las pulsaciones?

Estoy en MacOS 11.2.1 . Tengo un código AppleScript basado en Automator para leer el texto de un archivo y luego "escribirlo" en la aplicación que está actualmente activa. Esto funciona bien, pero necesito algo más rápido. Tengo un archivo de 2 Meg de texto que quiero enviar a una aplicación, y se tarda unas horas utilizando este código Applescript. ¿Puede alguien sugerir una forma de simular la escritura más rápida que esto?

on readFile(unixPath)
    set fhandle to (open for access (POSIX file unixPath))
    set txt to (read fhandle for (get eof fhandle) as «class utf8»)
    close access fhandle
    return txt
end readFile

set texttowrite to readFile("/path/to/file/containing/text")
tell application "[Target Application]" to activate
tell application "System Events"
    repeat with i from 1 to count characters of texttowrite
        keystroke (character i of texttowrite)
    end repeat
end tell

... donde [Target Application] es la aplicación en la que se "tecleará" el texto.

Necesito hacer esto en lugar de simplemente un comando "cp", porque la aplicación de destino es una puerta de enlace a un servicio en una máquina diferente. Esa aplicación en particular no ofrece capacidades de transferencia de archivos, por lo que necesito hacer esto a través de la escritura simulada.

¿Alguna sugerencia sobre cómo hacer esta simulación de escritura más rápida?

Gracias de antemano.

PS : Esta lentitud no tiene nada que ver con el hecho de que la aplicación de destino gestione una conexión remota. Si utilizo este código para enviar los datos a una aplicación en la misma máquina en la que se ejecuta este AppleScript, el "tecleo" es igual de lento.

0voto

Tetsujin Puntos 23061

Lea el archivo, luego extraiga el paragraph
Muy simplificado...

set theFile to open for access myPath 
set fileContents to (read theFile)
close access theFile
set myParas to count paragraphs of fileContents 
repeat with i from 1 to myParas 
    set myText to myText & "\n" & paragraph i of fileContents
end repeat

tell application "app" to activate
tell application "System Events" to keystroke myText

0voto

wch1zpink Puntos 11

El siguiente código AppleScript debería servir para la misma función que está buscando, pero los resultados serán casi instantáneos porque no tendrá que pulsar cada letra individualmente.

— Save Anything That Is Currently On Your Clipboard
copy (the clipboard) to oldClipboard

-- Choose File Whose Contents You Want To Read
activate
set theFile to POSIX path of (choose file)

—-Copies Contents Of The Chosen File To Your Clipboard
set theText to do shell script ¬
    "pbcopy < " & quoted form of theFile

tell application "Target Application" to activate

—- Pastes Contents Of The Chosen File Into The "Target Application"
tell application "System Events" to keystroke ¬
    "v" using {command down}

-- Restores The Clipboard To Its Original State
delay .1
set the clipboard to oldClipboard

Esto funciona bien, pero necesito algo más rápido. Tengo un archivo de 2 Meg de de texto que quiero enviar a una aplicación, y tarda unas horas usando este código Applescript. ¿Puede alguien sugerir una forma de simular la escritura más rápido que esto?

Acabo de probar mi código utilizando un archivo .txt de 6 MB y tardó menos de un segundo.

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