Java Awt Robot 更改 Windows 鼠标速度

6
每次我使用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.");

这个操作本质上是点击开始菜单,键入“记事本”,打开记事本,然后键入“我正在写这个”。

robotType()只是我创建的一个快速函数,用于将字符串转换为一系列键盘按下/释放操作。

2个回答

1

这似乎是一个Windows的bug,因为您所做的任何事情都不会本质上改变鼠标速度。看来你可能运气不佳...


0

不是解决方案,而是一种变通方法:

使用JNA可以获取/设置鼠标速度(确保您正在运行Windows)。当程序启动时,读取鼠标速度。然后在每次robot.mouseMove()之后恢复该值。

您需要添加jna.jarjna-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);
    }

    //[...]
}

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