每次使用Robot移动鼠标时,都会重置Windows鼠标速度。这真的很烦人,我想知道是否有人知道如何解决这个问题。这基本上是我正在搞乱的代码:
Robot robot = new Robot();
robot.mouseMove(10, 1070);
robot.delay(300);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(300);
robotType("notepad");
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(400);
robotType("I am writing this.");
这样做是essentaily点击开始按钮,输入“记事本”,打开记事本,然后键入“我正在写这个”。
robotType()只是我做的一个快速函数,可以将字符串转换为一系列键盘按下/释放。
答案 0 :(得分:1)
这似乎是一个Windows bug,因为你所做的一切都不会改变鼠标的速度。看来你可能运气不好......
答案 1 :(得分:0)
不是解决方法,而是解决方法:
使用JNA,您可以获取/设置鼠标速度(确认您在Windows上运行)。程序启动时,请阅读鼠标速度。然后在每次robot.mouseMove()
恢复该值之后。
您需要添加jna.jar
和jna-platform.jar
,可在此处找到:https://github.com/java-native-access/jna/tree/master/dist
interface User32 extends com.sun.jna.platform.win32.User32 {
User32 INSTANCE = (User32) Native.loadLibrary(User32.class,
W32APIOptions.DEFAULT_OPTIONS);
boolean SystemParametersInfo(
int uiAction,
int uiParam,
Object pvParam, // Pointer or int
int fWinIni
);
}
public static void main(String[] args) throws AWTException {
Pointer mouseSpeedPtr = new Memory(4);
Integer mouseSpeed = User32.INSTANCE.SystemParametersInfo(0x0070, 0, mouseSpeedPtr, 0)
? mouseSpeedPtr.getInt(0) : null;
//[...]
rob.mouseMove(10, 1070);
if (mouseSpeed != null) {
User32.INSTANCE.SystemParametersInfo(0x0071, 0, mouseSpeed, 0x02);
}
//[...]
}