2012-04-03 13 views
6

Jedes Mal, wenn ich Roboter verwende, um die Maus zu bewegen, setzt es die Windows-Mausgeschwindigkeit zurück. Das ist wirklich nervig, und ich frage mich, ob jemand weiß, wie das zu beheben ist. Hier ist im Grunde der Code, den ich durcheinander bin um mit:Java Awt Robot ändert 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."); 

Was dies bedeutet ist essentaily den Startknopf klicken, Typ „Notizblock“, Notepad öffnen, tippt dann „ich dies schreibe“.

robotType() ist nur eine schnelle Funktion, die ich gemacht habe, die eine Zeichenfolge in eine Reihe von Tastatur Drücken/Freigaben konvertiert.

Antwort

1

Dies scheint ein Windows-Bug zu sein, da nichts, was Sie getan haben, die Mausgeschwindigkeit verändert. Es scheint, dass Sie kein Glück sein kann ...

0

kein Update, sondern eine Abhilfe:

Mit JNA können Sie die Maus-Geschwindigkeit erhalten/Set (überprüfen Sie auf Windows ausgeführt werden). Wenn Ihr Programm startet, lesen Sie die Mausgeschwindigkeit. Dann stellen Sie nach jedem robot.mouseMove() diesen Wert wieder her.

Sie benötigen jna.jar und jna-platform.jar hinzuzufügen, die hier gefunden werden kann: 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); 
    } 

    //[...] 
}