【问题标题】:Java Robot - Check Symbol KeyJava Robot - 检查符号键
【发布时间】:2012-12-11 15:02:40
【问题描述】:

我目前的项目涉及使用 Java 的 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 结合使用时给出什么符号,因为不同的键盘(并且通常来自操作系统的不同键盘配置)会改变这些。

一个典型的例子是@ (at symbol) and " (double quote)VK_SHIFT + VK_2 在某些系统上可能是 at 符号,而在其他系统上可能是双引号。

在调用机器人按键之前,Java 中是否有要检查的符号依赖于哪个键?

提前致谢。

【问题讨论】:

  • 你能假设键盘布局不会随时间改变吗?
  • 这句话来自一个名叫德沃夏克的人,有点讽刺! :)
  • @HovercraftFullOfEels 不用担心,Dvorak 键盘与 QWERTY 共享 shift 映射,只是按键位置不同。
  • 为什么不假设 shift-mapping 与英国键盘兼容?
  • 如果一切都失败了,您可以随时询问用户如何获取特定符号。

标签: java keyboard awt keypress awtrobot


【解决方案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 已打开。

http://www.alt-codes.net/ 是一个获取您需要的替代代码的有用网站

【讨论】:

  • +1 以获得有用的答案和工作示例。这一定会奏效,因为 alt 代码不会更改。正是我需要的。谢谢:)
  • 一些 JAVA 应用程序不支持 Alt 代码...看来,我们确实需要一个大的键盘映射数据库,或者从系统中获取。
  • 虽然它可以在 Windows 环境中工作,但它在 Linux 中不起作用。在 Linux 中按 ALT + NUMBER 不会输出字符。
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2016-09-06
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多