java – 检测鼠标单击屏幕上的任意位置

我希望我的应用程序能够在屏幕上的任何位置检测鼠标点击,而无需关注应用程序。 我希望它能够普遍检测鼠标事件,即使它被最小化。 到目前为止,我只能在摇摆gui中检测鼠标事件。

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

这可能是一个小技巧。 应该是100%跨平台(在Linux和Windows上测试)。 基本上,你创建一个小的JWindow,使它“alwaysOnTop”并使用鼠标使用计时器移动它。

然后,您可以使用Robot类记录单击,关闭窗口并将单击转发到实际接收器。

在我的测试中,左右键点击完全正常。

你也可以模拟拖动和点击并保持,只是转发似乎更难。

我有这方面的代码,但它在我的Java扩展(JavaX)中。 JavaX确实转换为Java源代码,因此您可以在此处查看示例。

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(px-windowSize/2, py-windowSize/2); //print("moving"); }); }