Usted ha (hace unos años) abordado un problema general con el AppleScript de MacOS que me ha estado persiguiendo desde siempre
Así que empecé a buscar en la web -un poco estudio de viabilidad - tropezó naturalmente con Python y buscó muestras de código para hacer AS de los eventos del ratón. Esto es lo que he intentado construir:
A: A simple AppleScript (> "AS") to start (and end) the "watchout":
on idle {}
set repCount to 4
repeat while repCount>0
set thescript to "python '/Users/someUser/someFolder/Mouse±Key.py'"
set xYz to do shell script thescript
set repCount to RepCount - 1
delay 0.1
end repeat
display dialog "Now: " & (repCount as string) & " runs left…"
end idle
que se ejecutará "Mouse±Key.py" en un bucle, limitado por "repCuento" a 5 carreras.
A continuación, empecé a investigar Python y encontrar la forma de detectar eventos de ratón+tecla. Resultó que un módulo "pynput" tendría que ser instalado a su (mi) Python instalación:
python -m pip install pynput
fue recomendado para esto, así que tuve que instalar pip primero. Bueno
El actual * .py script no es muy largo, debido a mi negligencia criminal en la gestión de errores y otros.
(Como ya he mencionado: Este es un ¡Estudio de VIABILIDAD! )
Aquí viene el script - PERO: Como no soy ingeniero de software, no podré explicar (con autoridad) por qué una expresión especial está formulada o posicionada de la manera en que lo está. (juicio-y-error )
from pynput import mouse, keyboard
from pynput.keyboard import Key, Listener
import os
def on_press(key):
global keyDown
if key == Key.shift:
keyDown = "57.shift"
else:
keyDown = "none"
def on_click(x, y, button, pressed):
global keyDown
if button.value[1] == 3 and keyDown == "57.shift":
cmd = """
osascript -e 'tell application "System Events" \n key code 123 using {control down}\n delay 0.5\n end tell'
"""
os.system(cmd)
elif button.value[1] == 4 and keyDown == "57.shift":
cmd = """
osascript -e 'tell application "System Events" \n key code 124 using {control down}\n delay 0.5\n end tell'
"""
os.system(cmd)
if not pressed:
listener_key.stop()
listener_mouse.stop()
listener_key = keyboard.Listener(on_press=on_press)
listener_key.start()
listener_mouse = mouse.Listener(on_click=on_click)
listener_mouse.start()
keyDown = "none "
key = "X"
if keyDown == "57.shift":
listener_key.stop()
listener_key.join()
listener_mouse.join()
Bien, lo que yo -como lego- puede decir:
Las 3 primeras líneas importan módulos pynput (no estoy seguro, por qué teclado y ratón por separado) & os .
A continuación, 2 funciones cruciales on_press y on_click se definen;
(teclado también es compatible con on_release , ratón puede manejar on_scroll y on_move eventos).
Entre estas funciones, pero también en el hilo principal (por tanto global ) mi variable "keyDown" "transporta" la información si el clave reconocido como Clave.turno fue presionado . Nombré su contenido "57.shift" como el código de la tecla "shift" de AS.
Necesitaba "keyDown" ya que decidí dejar que el on_press sólo hacen el reconocimiento de la llave mientras que on_click evalúa el clave , decide qué acción tomar y para la "carrera" actual Detener s los oyentes.
El importado módulo os entra en juego cuando el funciones on_ llame a "atrás" a MacOS aplicación "Eventos del sistema" vía 2 osascripts (= Arquitectura de scripting abierta lenguaje), como AppleScrips.
El osascripts instruir MacOS propio sistema para invocar 2 "integrados" Control de la misión (tecla de flecha) que cambiará a los espacios del lado izquierdo (código de tecla 123) y del lado derecho (124) (s.t. llamado "Escritorios" ).
Al final de la on_click función 2 diferente Oyente s aparecen, en realidad a Detener su escucha (una vez que la osa/AppleScript ha funcionado).
Siguiente, keyboard.Listener y mouse.Listener se definen finalmente y iniciar() ed;
por otro lado, éstas se ponen en relación con las 2 funciones vitales.
El código restante define primero "keyDown" proporciona un valor inicial ficticio para clave y finalmente "se une" ambos hilos de escucha para que "espera" entre sí (dicho simplemente).
Principalmente he investigado estos códigos por puro interés; para hacer pruebas (por desgracia uso un MacBook sin botones 4 y 5) he utilizado esta línea: print(key, "(", button.value[1], ")", keyDown+" >> ", button)
.
ADVERTENCIA: Como no hay manejo de errores, pueden ocurrir cosas extrañas si experimentas con mi código.
(Cualquiera que tenga más conocimientos informáticos que yo puede mejorar o comentar mis esfuerzos, pero por favor, deje mi lista de viñetas tal y como está).