¿Cuál es la JXA equivalente de
--AppleScript
tell application ("System Events")
click at(x,y)
end tell
¿Cuál es la JXA equivalente de
--AppleScript
tell application ("System Events")
click at(x,y)
end tell
En JXA, parece que el click()
función debe ser enviado a un determinado elemento de interfaz de usuario (que puede ser un proceso de solicitud), mientras que este no es el caso en AppleScript.
(()=>{
return clickAt('Safari', [60, 44]);
})();
// {x, y} relative to screen's top-left
function clickAt(appName, [x, y]) {
const sys = Application('System Events');
const proc = sys.processes[appName];
if (!proc.exists()) return -1;
return proc.click({ at: [x, y] });
}
Como usted probablemente sabe, este Sistema de Eventos de comando es una simulación de clic, que simplemente se detecta un elemento de interfaz de usuario en las coordenadas especificadas pertenecientes al proceso especificado (independientemente de la ventana de oscurecimiento, es decir, aplicaciones en la parte trasera, fuera de la vista, responderá a los comandos), y si ese elemento se reconoce una acción de clic (por lo general, si su actions
contienen un nombre AXPress
), entonces la acción se desencadena. Por lo tanto, no es propiamente un evento de clic de ratón procesados por el sistema.
Pero, dado que estamos trabajando en JXA, opcionalmente, puede beneficiarse de su amplia Objective-C puente:
(()=>{
mouseclick(); // Clicks at mouse location
mouseclick(35, 60); // Clicks at coordinates {35, 60}
// relative to top-left of screen
})();
function mouseclick(x = null, y = null) {
ObjC.import('Cocoa');
const nil = $();
const mouseLoc = $.NSEvent.mouseLocation;
const screenH = $.NSScreen.mainScreen.frame.size.height;
mouseLoc.y = screenH - mouseLoc.y;
var coords = mouseLoc;
if (x && y) coords = {x: x, y: y};
var mousedownevent = $.CGEventCreateMouseEvent(nil,
$.kCGEventLeftMouseDown,
coords,
nil);
var mouseupevent = $.CGEventCreateMouseEvent(nil,
$.kCGEventLeftMouseUp,
coords,
nil);
$.CGEventPost($.kCGHIDEventTap, mousedownevent);
$.CGEventPost($.kCGHIDEventTap, mouseupevent);
$.CFRelease(mousedownevent);
$.CFRelease(mouseupevent);
}
Este mouseclick()
función envía un evento real, para ser procesados como si hubiera sido generados por físicamente clic con el ratón. Por lo tanto, como era de esperar, un clic del ratón no penetrar a través de oscurecida posterior aplicación de windows; actúa sobre lo que se ve en 2D pixel paisaje.
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.