gpt4 book ai didi

macos - 如何在 Cocoa 中以编程方式模拟鼠标点击而不移动鼠标

转载 作者:行者123 更新时间:2023-12-03 16:06:20 24 4
gpt4 key购买 nike

我有兴趣在 Mac OS X 上模拟鼠标单击事件/键盘敲击,而无需实际移动鼠标。

在 Windows 中,可以使用消息来执行此操作:

win32: simulate a click without simulating mouse movement?

Mac OS X 上有类似的吗?我知道Quartz Event Services ,但该 API 似乎只会限制我将事件发送到当前的关键窗口。这是真的?是否可以将键盘/鼠标事件发送到非键窗口?我真的只需要能够向另一个应用程序发送键盘命令。

最佳答案

我知道这是一个旧线程,但我想发布一个答案,以防万一有人偶然发现这一点。

实现此目的的两种最佳方法实际上是完全独立于平台的。 (除非你想使用 C,在我看来,这不必要地冗长,但如果你想使用它 see this answer )

1) 最简单的方法是使用 javAuto 。 (注:javAuto 已移动 here )。它几乎是一个java程序,可以跨平台编译和运行基本的自动化脚本。要模拟鼠标单击,您可以使用以下命令:

mouseClick(按钮, x, y);

要在不移动鼠标的情况下模拟鼠标点击,您可以使用以下命令:

// get cursor coordinates
int cPos[] = cursorGetPos();

// mouse click at the coordinates you want
mouseClick("left", x, y);

// instantly move the mouse back
mouseMove(cPos[0], cPos[1]);

由于 mouseClick 和 mouseMove 命令不涉及任何临时鼠标移动,因此将在 (x, y) 处发生单击,但鼠标根本不会移动。

2) 执行此操作的下一个最佳方法是使用常规 Java,这将比 javAuto 中的相同进程涉及更多代码。

import java.awt.*;
import java.awt.event.InputEvent;

public class example {
public static void main(String[] args) {
//get the current coordinates
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int xOrig = (int)b.getX();
int yOrig = (int)b.getY();

try {
//simulate a click at 10, 50
Robot r = new Robot();
r.mouseMove(10, 50);
r.mousePress(InputEvent.BUTTON1_MASK); //press the left mouse button
r.mouseRelease(InputEvent.BUTTON1_MASK); //release the left mouse button

//move the mouse back to the original position
r.mouseMove(xOrig, yOrig);
} catch (Exception e) {
System.out.println(e.toString());
}
}
}

关于macos - 如何在 Cocoa 中以编程方式模拟鼠标点击而不移动鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12123150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com