1 votos

¿Applescript que escucha eficazmente los cambios en el portapapeles?

Me gustaría hacer algo cada vez que el contenido del portapapeles cambie. Tengo una solución que funciona ahora donde obtengo el valor del portapapeles y lo guardo, luego comienzo un bucle infinito donde busco el portapapeles de nuevo, veo si ha cambiado, luego duermo durante 0,5s y lo hago todo de nuevo.

Esto definitivamente funciona, pero quiero hacerlo mejor. Preferiría si puedo escuchar una notificación que sólo me diga cuando el portapapeles cambia. Hay una UIPasteboardChanged evento en UIKit que permite hacer esto, pero preferiría no tener que escribir esto en código Swift para lograr mi objetivo. :-)

¿Alguna idea de cómo hacer esto en Applescript/Automator/Python? Gracias.

1voto

Khb Puntos 1002

Acabé resolviendo esto utilizando enlaces de Objective C para Python. Así que no es realmente una respuesta de AppleScript. Todavía se basa en el sondeo, pero es 1000 veces más eficiente para la CPU que llamar a pbpaste de la cáscara.

Después de instalar el AppKit Python bindings, puedo obtener la mesa de trabajo actual así:

from AppKit import NSPasteboard, NSStringPboardType
NSPasteboard.generalPasteboard().stringForType_(NSStringPboardType)

Ejecuto esto en un bucle cerrado, sondeando cada segundo, y su uso de la CPU es bastante insignificante.

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