如何让机器人按住鼠标按钮一段时间?

4

我正在使用Java中的Robot类生成鼠标按键:

robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

然而,我希望机器人能按下按钮一段时间。我该如何实现这个功能?

请模拟鼠标按下操作以实现 https://dev59.com/YFXTa4cB1Zd3GeqP5ded 的功能。 - mKorbel
2个回答

12

在两个动作之间添加一些睡眠时间(以毫秒为单位):

  1. Thread.sleep(long millis);

robot.mousePress(InputEvent.BUTTON1_MASK);
try { Thread.sleep(1000); } catch(Exception e) {} // Click one second
robot.mouseRelease(InputEvent.BUTTON1_MASK);
  • Robot.delay(long millis);

  • robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(1000); // Click one second
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    

    不要使用Robot.delay(long),它已经失效了。在过去的使用中给我带来了很多痛苦。这个库方法会吞掉中断。也就是说,在catch块中它不会重置标志,因此你不能编写任何合理的可中断任务,而这些任务需要使用delay。相反,应该使用TimeUnit.MILLISECONDS.sleep(long timeout),并且始终在catch (InterruptedException e)块中调用"Thread.currentThread().interrupt();"来将中断标志传播到线程的所有者(例如,使用Executors的静态方法之一创建的某个标准ExecutorService)。 - vitrums

    0

    我做过这个,很简单:当你检测到鼠标被按下时,保存System.currentTimeMillis()。当你检测到鼠标被释放时,只需检查它被按下了多长时间。

    如果你想在一定的时间后执行操作,即使鼠标仍然被按下,你可以启动一个线程,在按下时保持所需的时间,并在释放时中断它。如果线程在你想要的时间内没有被中断,操作将被执行。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接