Quel est l'équivalent en JXA de
--AppleScript
tell application ("System Events")
click at(x,y)
end tell
Quel est l'équivalent en JXA de
--AppleScript
tell application ("System Events")
click at(x,y)
end tell
Dans JXA, il apparaît que le click()
doit être envoyée à un élément spécifique de l'interface utilisateur (qui peut être un processus d'application), alors que ce n'est pas le cas dans 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] });
}
Comme vous le savez probablement, cette Événements du système est un clic simulé, qui détecte simplement un élément de l'interface utilisateur aux coordonnées spécifiées, appartenant au processus spécifié (indépendamment de l'obscurcissement de la fenêtre, c'est-à-dire que les applications à l'arrière, hors de vue, répondront à la commande), et si cet élément reconnaît une action de clic (typiquement si son actions
contiennent un nommé AXPress
), alors l'action est déclenchée. Il ne s'agit donc pas d'un véritable événement de clic de souris traité par le système.
Mais, étant donné que vous travaillez en JXA, vous pouvez éventuellement bénéficier de sa passerelle Objective-C étendue :
(()=>{
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);
}
Ce site mouseclick()
envoie un événement réel qui sera traité comme s'il avait été généré par un clic physique sur la souris. Ainsi, comme on peut s'y attendre, un clic de souris ne pénètre pas dans les fenêtres obscures de l'application arrière ; il agit sur ce que vous voyez dans un paysage de pixels en 2D.
LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.