Java机器人-检查符号键

Java机器人-检查符号键,java,keyboard,awt,keypress,awtrobot,Java,Keyboard,Awt,Keypress,Awtrobot,我当前的项目涉及使用Java的Robot类来模拟按键的自动化。 我的问题是,某些键码传递给机器人的keypress(int-keycode)方法无效 我已经知道: 在阅读了这个问题的解决方案之后:,我开始修改我的代码,将某些符号如(VK_美元)更改为VK_SHIFT+VK_3,和(VK_符号)更改为VK_SHIT+VK_7,等等 我的问题: 然而,我的问题是,当与shift组合时,如何确定哪个键给出了什么符号,因为不同的键盘(通常是操作系统中不同的键盘配置)会改变这些符号 典型的例子是@(at符

我当前的项目涉及使用Java的Robot类来模拟按键的自动化。 我的问题是,某些键码传递给机器人的
keypress(int-keycode)
方法无效

我已经知道: 在阅读了这个问题的解决方案之后:,我开始修改我的代码,将某些符号如
(VK_美元)
更改为
VK_SHIFT+VK_3
和(VK_符号)
更改为
VK_SHIT+VK_7
,等等

我的问题: 然而,我的问题是,当与shift组合时,如何确定哪个键给出了什么符号,因为不同的键盘(通常是操作系统中不同的键盘配置)会改变这些符号

典型的例子是
@(at符号)和“(双引号)
VK_SHIFT+VK_2
在某些系统上可能是at符号,而在其他系统上可能是双引号

在调用Robot按键之前,Java中是否还需要检查符号所依赖的键


提前感谢。

我在使用机器人时已经遇到了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\u NUMPAD0、KeyEvent.VK\u NUMPAD0、KeyEvent.VK\u NUMPAD3、KeyEvent.VK\u NUMPAD8);

您只需确保Num Lock处于启用状态


获取您需要的alt代码的有用站点是

我在使用机器人时已经遇到了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\u NUMPAD0、KeyEvent.VK\u NUMPAD0、KeyEvent.VK\u NUMPAD3、KeyEvent.VK\u NUMPAD8);

您只需确保Num Lock处于启用状态


获取所需alt代码的一个有用站点是

你能假设键盘布局不会随时间而改变吗?这句话有点讽刺,出自一个名叫德沃夏克的人:)@HovercraftFullOfEels别担心,德沃夏克键盘与QWERTY共享移位映射,只是键位于不同的位置。为什么不假设移位映射为Ping与英国键盘兼容?如果所有其他方法都失败了,你可以随时询问用户如何获得特定符号。你能假设键盘布局不会随时间而改变吗?这句话来自一个名叫Dvorak的人,有点讽刺意味!:@HovercraftFullOfEels别担心,Dvorak键盘与QWERTY共享移位映射,就是keY位于不同的位置。为什么不假设移位映射与英国键盘兼容?如果所有其他操作都失败,您可以随时询问用户如何获取特定符号。+1提供了有用的答案和工作示例。这肯定会起作用,因为alt代码不会更改。这正是我需要的。谢谢:)某些JAVA应用程序不支持lt代码…似乎,我们真的需要一个大的键盘映射数据库,或者从系统中获取它。虽然它在Windows环境下工作,但在Linux中不工作。在Linux中,按ALT+NUMBER键不会输出字符。+1是有用的答案和工作示例。这一定会工作,因为ALT代码不会更改。这正是我需要的d、 谢谢:)有些JAVA应用程序不支持Alt代码……看起来,我们真的需要一个键盘映射的大数据库,或者从系统中获取它。虽然它在Windows环境中可以工作,但在Linux中不工作。在Linux中,按Alt+NUMBER不会输出字符。