2012-04-03 13 views
6

ロボットを使用してマウスを移動するたびに、Windowsのマウス速度がリセットされます。これは本当に対処するのが面倒です、誰かがこれを修正する方法を知っているのだろうかと思っていました。Java Awtロボットが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のバグであるように見えます。これは、本質的にマウスの速度を変更するものではありません。 JNAで

あなたが得る/マウスの速度を設定します(Windowsで実行されていることを確認)することができます:

0

未修正...あなたは運していない可能性がありそうですが、回避策は。プログラムが起動したら、マウス速度を読みます。その後、毎回robot.mouseMove()がその値を復元します。

あなたはjna.jarとここで見つけることができjna-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); 
    } 

    //[...] 
} 
関連する問題