2012-04-03 83 views
6

每次使用Robot移動鼠標時,它都會重置Windows鼠標的速度。這真的很煩人,我想知道是否有人知道如何解決這個問題。下面是基本上我亂搞的代碼:Java Awt 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."); 

這樣做是essentaily點擊開始按鈕,輸入「記事本」,打開記事本,然後類型「我寫這本」。

robotType()只是一個快速的函數,我將字符串轉換爲一系列鍵盤按下/釋放。

回答

1

這似乎是一個Windows錯誤,因爲沒有做任何事情本質上改變了鼠標的速度。看來你可能是出於運氣...

0

不是一個解決方法,但有解決方法:

隨着JNA你可以得到/設置鼠標速度(驗證你在Windows上運行)。當你的程序開始時,請閱讀鼠標速度。然後在每個robot.mouseMove()後恢復該值。

你需要添加jna.jarjna-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); 
    } 

    //[...] 
}