首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java -检测屏幕上任意位置的鼠标点击

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

Stack Overflow用户
提问于 2014-08-26 08:30:32
回答 1查看 5.4K关注 0票数 2

我希望我的应用程序可以检测屏幕上任何地方的鼠标点击,而不必让应用程序专注于此。我希望它能检测所有的鼠标事件,即使它被最小化了。到目前为止,我只能在swing gui中检测到鼠标事件。

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

EN

回答 1

Stack Overflow用户

发布于 2016-11-28 02:16:27

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

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

在我的测试中,短的左击和右击完全可以正常工作。

你也可以模拟拖拽和点击-按住,只是转发看起来更难的东西。

我有这方面的代码,但它在我的Java扩展(JavaX)中。JavaX可以转换成Java源代码,所以您可以查看示例here

JavaX中的代码:

代码语言:javascript
复制
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");
  });
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25496292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档