我正在尝试使用AWT Robot移动Windows资源管理器窗口。机器人在Java 7上运行,操作系统是Windows 7。
我可以移动鼠标并点击东西,但当我尝试点击并拖动时,它似乎根本没有按下按钮。我看不到哪里出了问题,也不知道怎么弄清楚到底是怎么回事。
我一开始使用的是Sikuli:
mouse.mouseDown(InputEvent.BUTTON1_MASK);
mouse.drop(targetLocation);当这不起作用时,我尝试了一个较低级别的实现,直接与机器人合作:
Robot robot = new Robot();
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseMove(targetLocation.getX(), targetLocation.getY());
robot.mouseRelease(InputEvent.BUTTON1_MASK);鼠标从正确的位置开始并移动到正确的目的地,但似乎没有按下按钮。
发布于 2013-06-12 02:27:44
在sikuli中,使用mouse.drag(),然后使用mouse.drop()。示例:
ScreenRegion fullScreenRegion=new ScreenRegion();
ImageTarget dragImageTarget=new ImageTarget("dragTargetFile");
ScreenRegion dragTargetRegion=fullScreenRegion.find(dragImageTarget);
ImageTarget dropImageTarget=new ImageTarget("dropTargetFile");
ScreenRegion dropTargetRegion=fullScreenRegion.find(dropImageTarget);
Mouse mouse = new DesktopMouse();
mouse.drag(dragTargetRegion.getCenter());
mouse.drop(dropTargetRegion.getCenter());对于Java Robot API:您应该按顺序调用mouseMove()、mousePress()、mouseMove(),然后调用mouseRelease()。示例:
Robot robot=new Robot();
// drag
robot.mouseMove(x1, y1);
robot.mousePress(InputEvent.BUTTON1_MASK);
// drop
robot.mouseMove(x2, y2);
robot.mouseRelease(InputEvent.BUTTON1_MASK);发布于 2017-07-13 00:28:07
我也遇到了完全相同的问题。甚至尝试了@Andrzej Kasp所说的,在一定的时间内添加线程睡眠。它不起作用,直到我根据@Andrzej Kasp的评论做了一些修改。感谢Andrzej Kasp。
它不工作的全部原因是因为线程是连续执行的。我尝试添加thread.sleep(100);每个操作之间不起作用。代码如下:
robot.mouseMove(x1,y1); //step 1
thread.sleep(100);
robot.mousePress(InputEvent.BUTTON1_MASK); //step 2
thread.sleep(100);
robot.mouseMove(x2, y2); //step 3
thread.sleep(100);
robot.mouseRelease(InputEvent.BUTTON1_MASK); //step 4它对我不起作用。不过,它可能会对您起作用。这取决于计算机。这背后的整个理论是,如果你想确保正常工作,你必须确保鼠标在光标移动时被按下。即。步骤2和步骤3正在同时执行。在正常情况下,计算机在运行此程序时不会创建新线程,除非您使用thread.sleep(),否则它将挂起当前线程,并将处理器时间分配给其他线程。因此,您不必在每个步骤之后添加thread.sleep(100),相反,您只需在步骤2和步骤3之间添加thread.sleep(100)。我测试了这些代码,它们工作正常。代码如下:
robot.mouseMove(x1,y1); //step 1
robot.mousePress(InputEvent.BUTTON1_MASK); //step 2
thread.sleep(100);
robot.mouseMove(x2, y2); //step 3
robot.mouseRelease(InputEvent.BUTTON1_MASK); //step 4如果你有更多的问题,请告诉我。
发布于 2013-07-04 16:38:18
我也遇到过类似的问题。尝试在每个机器人操作之间添加Thread.sleep(100); (或超过100个)。
https://stackoverflow.com/questions/16466461
复制相似问题