Java awt Robot все още не може да натиска стрелки, различни от цифровата клавиатура, на прозорци?

Този бъг е известен от години, но все още присъства във версията на Java 1.7.0_25, която използвам на Windows 8. Следният резултат е същият, независимо от това дали имам включен numlock или не:

Robot bot = new Robot();

bot.keyPress(KeyEvent.VK_UP); //this in documentation is non-numpad up arrow key
bot.keyRelease(KeyEvent.VK_UP); //pressed the numpad up arrow key

//folowing line is line #43
bot.keyPress(KeyEvent.VK_KP_UP); //this in documentation is numpad up arrow key
bot.keyRelease(KeyEvent.VK_KP_UP); //causes folowing exception:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid key code
at sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.awt.Robot.keyPress(Robot.java:358)
at test.RobotArrow.main(RobotArrow.java:43)

Знам, че този въпрос вече беше зададен тук, но преди повече от година, значи има ли напредък Не мога да намеря нищо в Google, дори има официален доклад за грешка

И така, има ли най-накрая решение или не?


person kajacx    schedule 05.02.2014    source източник


Отговори (2)


//НАТИСНЕТЕ WINDOWS + СТРЕЛКА НАЛЯВО

Robot divideWindow = new Robot();
divideWindow.keyPress(KeyEvent.VK_WINDOWS);
divideWindow.delay(100);
divideWindow.keyPress(KeyEvent.VK_LEFT);
divideWindow.delay(100);
divideWindow.keyRelease(KeyEvent.VK_LEFT);
divideWindow.delay(100);
divideWindow.keyRelease(KeyEvent.VK_WINDOWS);

Работи добре за мен :)

person bhordupur    schedule 14.05.2014
comment
Тествам това с празен JFrame и улавям събитие с KeyboardFocusManager и това не прави това, което искам. Искам да натисна клавиш със стрелка без цифрова клавиатура чрез Robot, това натиска windows + клавиш със стрелка, като по този начин премества моя JFrame съответно, не искам това. - person kajacx; 15.05.2014
comment
Това не е заместител на натискането на клавишите със стрелки; ще активира преките пътища на Windows за преместване на прозорци. - person ZX9; 29.04.2016

Възможно заобиколно решение е да деактивирате numlock. Вижте този коментар за грешка в jdk

person Joe23    schedule 07.11.2016