gpt4 book ai didi

java - 检测鼠标在屏幕上任意位置的点击

转载 作者:行者123 更新时间:2023-11-30 09:03:53 24 4
gpt4 key购买 nike

我希望我的应用程序能够检测到屏幕上任意位置的鼠标点击,而无需让应用程序处于焦点状态。我希望它能够普遍检测鼠标事件,即使它已最小化。到目前为止,我只能检测到 swing gui 中的鼠标事件。

Autohotkey 可以检测鼠标点击并随时获取鼠标位置,我如何用 java 实现?

最佳答案

可以通过一些小技巧来实现。应该是 100% 跨平台的(在 Linux 和 Windows 上测试)。基本上,您创建一个小的 JWindow,将其设置为“alwaysOnTop”并使用计时器通过鼠标移动它。

然后,您可以记录点击、关闭窗口并使用 Robot 类将点击转发给实际的接收者。

在我的测试中,短时左右点击完全没问题。

你也可以模拟拖动和点击并按住,只是转发看起来更难。

我有这方面的代码,但它在我的 Java 扩展 (JavaX) 中。 JavaX 确实翻译成 Java 源代码,因此您可以查看示例 here .

JavaX 中的代码:

static int windowSize = 11; // odd should look nice. Set to 1 for an invisible window
static int clickDelay = 0; // Delay in ms between closing window and forwarding click. 0 seems to work fine.
static int trackingSpeed = 10; // How often to move the window (ms)

p {
final new JWindow window;
window.setSize(windowSize, windowSize);
window.setVisible(true);
window.setAlwaysOnTop(true);
JPanel panel = singleColorPanel(Color.red);
window.setContentPane(panel);
revalidate(window);
final new Robot robot;
panel.addMouseListener(new MouseAdapter {
// public void mousePressed(final MouseEvent e) {}

public void mouseReleased(final MouseEvent e) {
print("release! " + e);
window.setVisible(false);
int b = e.getButton();
final int mod =
b == 1 ? InputEvent.BUTTON1_DOWN_MASK
: b == 2 ? InputEvent.BUTTON2_DOWN_MASK
: InputEvent.BUTTON3_DOWN_MASK;
swingLater(clickDelay, r {
print("clicking " + mod);
robot.mousePress(mod);
robot.mouseRelease(mod);
});
}
});

swingEvery(window, trackingSpeed, r {
Point p = getMouseLocation();
window.setLocation(p.x-windowSize/2, p.y-windowSize/2);
//print("moving");
});
}

关于java - 检测鼠标在屏幕上任意位置的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496292/

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