Java Awt Robot изменяет скорость мыши Windows - PullRequest
6 голосов
/ 03 апреля 2012

Каждый раз, когда я использую 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 голос
/ 23 июля 2012

Это может показаться ошибкой Windows, поскольку ничего из того, что вы сделали, по сути не изменяет скорость мыши.Кажется, вам не повезло ...

0 голосов
/ 08 января 2017

Не исправление, а обходной путь:

С помощью 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);
    }

    //[...]
}
...