我目前的项目涉及使用Java的Robot类进行自动化,以模拟按键。
我的问题是某些密钥代码无法传递给Robot的keypress(int keycode)
方法。
在阅读了此问题的解决方案后:Why are some KeyEvent keycodes throwing IllegalArgumentException: Invalid key ocode,我开始修改我的代码,将£ (VK_DOLLAR)
之类的某些符号更改为VK_SHIFT + VK_3
,& (VK_AMPERSAND)
更改为VK_SHIT + VK_7
等等......
我的问题是,如何确定哪个键与shift结合时会给出什么符号,因为不同的键盘(通常是与OS不同的键盘配置)会改变这些。
一个典型的例子是@ (at symbol) and " (double quote)
。 VK_SHIFT + VK_2
可能是某些系统上的at符号,而其他系统可能是双引号。
在调用Robot按键之前,Java是否还要检查符号所依赖的键?
提前致谢。
答案 0 :(得分:1)
使用机器人时,我已经经历过IllegalArgumentException。这是因为你的键盘布局。我的解决方案是使用Alt代码:
public static void alt(int event1, int event2, int event3, int event4) throws Exception {
Robot bot = new Robot();
bot.delay(50); //Optional
bot.keyPress(KeyEvent.VK_ALT);
bot.keyPress(event1);
bot.keyRelease(event1);
bot.keyPress(event2);
bot.keyRelease(event2);
bot.keyPress(event3);
bot.keyRelease(event3);
bot.keyPress(event4);
bot.keyRelease(event4);
bot.keyRelease(KeyEvent.VK_ALT);
}
可以轻松发送Alt代码。
例如,如果您想使用&符号,只需使用alt(KeyEvent.VK_NUMPAD0, KeyEvent.VK_NUMPAD0, KeyEvent.VK_NUMPAD3, KeyEvent.VK_NUMPAD8);
你必须确保Num Lock已开启。
获取您需要的alt代码的有用网站是http://www.alt-codes.net/