Mousepress 机器人在鼠标移动过程中不按鼠标的方法
我目前正在开发一个基本的实用软件,它能够记录键盘和鼠标输入,将输入保存到.txt文件,并在文件上回放数据。我正在修改程序以增加文件和播放功能。我遇到的问题是鼠标移动方法中的Robot.mousePress()方法:Mousepress 机器人在鼠标移动过程中不按鼠标的方法,mousepress,Mousepress,我目前正在开发一个基本的实用软件,它能够记录键盘和鼠标输入,将输入保存到.txt文件,并在文件上回放数据。我正在修改程序以增加文件和播放功能。我遇到的问题是鼠标移动方法中的Robot.mousePress()方法: public static void executeMouseMovementData() { mouseRobot.mousePress(InputEvent.BUTTON1_MASK); for (int i=0; i < MouseDataHandler
public static void executeMouseMovementData() {
mouseRobot.mousePress(InputEvent.BUTTON1_MASK);
for (int i=0; i < MouseDataHandler.mouseData.size(); i++) {
mouseRobot.moveMouse(MouseDataHandler.mouseData.get(i).getX(), MouseDataHandler.mouseData.get(i).getY());
mouseRobot.delay(MouseDataHandler.mouseData.get(i).getTimeElapsed());
}
mouseRobot.releaseMouse();
}
publicstaticvoid executeMouseMovementData(){
mouseRobot.mousePress(InputEvent.BUTTON1_掩码);
for(int i=0;i
这个程序遵循一个基本的事件序列:1数据初始化,2按下鼠标,3移动鼠标,4释放鼠标。与我成功实现的另一种方法不同,这种方法在任何时候都不会因为任何明显的原因按下鼠标。鼠标移动与播放功能完美配合。我似乎无法让机器人执行除移动以外的任何类型的鼠标事件,即使我重新构造了方法
我尝试过编辑该方法,以确保机器人在按下GUI上的“回放”按钮时不会按下鼠标,以免弄乱鼠标事件的焦点。该错误可能与代码的其他方面无关,因为程序中的所有其他内容都运行顺利。对象“mouseRobot”是Java.awt.Robot类的一个基本扩展类,具有用于复合机器人鼠标方法()的基本接口,我甚至直接从Robot类调用mousePress方法
此方法中可能出现的故障是什么
已解决。改进了处理鼠标移动的方法,使每帧鼠标移动一次。该类现在可以在鼠标移动之间准确地执行各种检查和数据更改,同时还允许其他类在不受冗长for循环影响的情况下运行。这个问题中的方法效率极低,不切实际,基本上是一个“while”循环
public void handleMouseMovements() {
if (shouldAttemptToMoveMouse) {
if (!targetHasBeenReached(currentAdjustedX, currentAdjustedY, targetX, targetY)) {
if (!movementCreated) {
calculateDirection(startX, startY, targetX, targetY);
getLineIndexToUse();
initializeMoveData(repositoryFileIndex, fileIndex);
movementCreated = true;
firstTime = System.currentTimeMillis();
}
if (CMMI >= Main.mouseDataHandler.getSizeOfRepositoryIndex(repositoryFileIndex, fileIndex)){
CMMI =0;
loopMovement();
}
if (movementfileIndexTimeHasElapsed(repositoryFileIndex, fileIndex)) {
moveMouse(repositoryFileIndex, fileIndex);
CMMI++;
firstTime = System.currentTimeMillis();
}
}
else {
resetData();
}
}
}
public void moveMouse(int repositoryFileIndex, int fileIndex) {
currentX = MouseDataHandler.mdr.get(repositoryFileIndex).get(fileIndex).get(CMMI).getX();
currentY = MouseDataHandler.mdr.get(repositoryFileIndex).get(fileIndex).get(CMMI).getY();
currentAdjustedX = currentX + distanceX;
currentAdjustedY = currentY + distanceY;
Main.bot.moveMouse(currentAdjustedX + Main.getX(), currentAdjustedY + Main.getY() + 25);
}
此方法效率更高,可以处理确定方向、确定要使用的鼠标数据的文件索引、计算目标文件索引偏移量所需的所有条件,并且在鼠标移动之间具有适当的时间间隔 当鼠标在“向下”和“向上”事件之间移动过多时,程序通常不会记录单击。因此,首先,你似乎只是搞错了顺序。MouseData目前不处理记录的点击,它只模拟移动数据。我只是简单地调用Robot mousePress方法,它应该按住左键直到调用release方法。我用另一个类似的方法实现了同样的事情,没有问题。我不知道为什么在这个特殊的方法中它不会发送任何鼠标点击事件。