【问题标题】:java - Detect Mouse Clicks Anywhere On Screenjava - 检测屏幕上任意位置的鼠标点击
【发布时间】:2014-10-19 05:11:37
【问题描述】:

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

Autohotkey 可以随时检测鼠标点击并获取鼠标的位置,java如何做到这一点?

【问题讨论】:

  • 基本上,在 Java 中,你不能。您将需要使用 JNI/JNA 将鼠标挂钩附加到本机系统中。由于这已被问过(之前多次),我建议您搜索 SO 以寻找类似的答案
  • this 这样的东西可能会有所帮助

标签: java mouse detect


【解决方案1】:

有一个小技巧是可能的。应该是 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");
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2014-12-09
    • 2013-11-18
    • 2016-03-19
    相关资源
    最近更新 更多