2012-04-03 12 views
6

Cada vez que uso Robot para mover el mouse, restablece la velocidad del mouse de Windows. Esto es realmente molesto de tratar, y me preguntaba si alguien sabe cómo solucionarlo. Aquí es básicamente el código que estoy jugando con:Java Awt Robot cambia la velocidad del mouse de 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."); 

Lo que esto hace es essentaily haga clic en el botón de inicio, escriba "notepad", la libreta abierta, a continuación, los tipos "Estoy escribiendo esto".

robotType() es solo una función rápida que hice que convierte una cadena en una serie de pulsaciones/lanzamientos de teclado.

Respuesta

1

Esto parece ser un error de Windows, ya que nada de lo que has hecho inherentemente altera la velocidad del mouse. Parece que puede estar fuera de suerte ...

0

no es una solución, sino una solución:

Con JNA se puede obtener/establecer la velocidad del ratón (verificar que se ejecutan en Windows). Cuando su programa se está iniciando, lea la velocidad del mouse. Luego, después de cada robot.mouseMove() restaurar ese valor.

Usted tendrá que añadir jna.jar y jna-platform.jar que se puede encontrar aquí: 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); 
    } 

    //[...] 
} 
Cuestiones relacionadas