2012-04-03 10 views
6

Za każdym razem, gdy używam Robot do poruszania myszą, resetuje szybkość myszy Windows. To naprawdę denerwujące, i zastanawiałem się, czy ktoś wie, jak to naprawić. Oto kod w zasadzie jestem aprowizacji z:Java Awt Robot zmienia Windows Mouse Speed ​​

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."); 

Co to robi jest essentaily kliknij przycisk Start, wpisz „notes”, otwarty notatnik, następnie typy „Piszę to”.

robotType() to po prostu szybka funkcja, którą zrobiłem, która przekształca ciąg w serię naciśnięć/wydań klawiaturowych.

Odpowiedz

1

Wygląda na to, że jest to błąd systemu Windows, ponieważ nic, co zrobiliście z natury, nie zmienia prędkości myszy. Wygląda na to może być pecha ...

0

Nie fix, ale obejście:

Z JNA można dostać/ustawić szybkość myszy (sprawdź, czy działa na Windows). Kiedy program się uruchamia, przeczytaj prędkość myszy. Następnie po każdym robot.mouseMove() przywróć tę wartość.

Musisz dodać jna.jar i jna-platform.jar które można znaleźć tutaj: 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); 
    } 

    //[...] 
}