2012-04-03 10 views
6

Ogni volta che utilizzo Robot per spostare il mouse, si ripristina la velocità del mouse di Windows. Questo è davvero fastidioso da affrontare, e mi stavo chiedendo se qualcuno sa come risolvere questo problema. Qui è fondamentalmente il codice che sto nei guai con:Java Awt Robot cambia la velocità del mouse 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."); 

Quello che fa è essentaily fare clic sul pulsante Start, digitare "notepad", aprire il blocco note, quindi i tipi "Scrivo questo".

robotType() è una funzione rapida che ho trasformato in una serie di tastiere/rilasci.

risposta

1

Questo sembrerebbe essere un bug di Windows, in quanto nulla che tu abbia fatto altera intrinsecamente la velocità del mouse. Sembra si può essere fuori di fortuna ...

0

Non una correzione, ma una soluzione alternativa:

Con JNA si può ottenere/impostare il mouse velocità (verificare in esecuzione su Windows). All'avvio del programma, leggi la velocità del mouse. Quindi, dopo ogni robot.mouseMove() ripristinare tale valore.

Avrai bisogno di aggiungere jna.jar e jna-platform.jar che può essere trovato qui: 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); 
    } 

    //[...] 
} 
Problemi correlati