【问题标题】:Detect the name/keycode of an unknown (0x0) key检测未知 (0x0) 键的名称/键码
【发布时间】:2015-02-21 18:57:13
【问题描述】:

我已经编写了检测哪个键被按下的代码。

@Override
        public void keyPressed(KeyEvent e) {
            int code = e.getKeyCode();
            String name = KeyEvent.getKeyText(code);

            tArea.append(name + " pressed\n");
        }

此代码运行良好。但在我的键盘上,这是一个圆圈,可用于停止正在媒体播放中播放的歌曲、开始歌曲(以及暂停歌曲)、切换到下一首歌曲,然后返回上一首歌曲。许多键盘都有这个按钮。 但是当我按下这个圈子的一个按钮时,它会说:

Unknown keycode: 0x0 pressed.

有什么方法可以得到这个密钥吗?我需要知道它是什么,因为我正在编写一个应该自动按下这些键的程序。

提前致谢

【问题讨论】:

  • stackoverflow.com/questions/17255549/… 可能是相关的。你需要扫描码。那些不同的专业键可能不会映射到特定的“字符”。所以他们会有一个扫描码,但没有键码。
  • 我认为对程序员可用的最重要的键有特殊的代码编号,而其他键我不知道!也许你必须自己做(如果我是的话,试着找到方法和使用开关盒来检测更多按钮!)

标签: java


【解决方案1】:

您需要使用getExtendedKeyCode() 方法来获取这些关键事件。

请注意,the Javadoc 表示您不会收到KEY_TYPED 事件,而只会收到KEY_PRESSEDKEY_RELEASED,因为KEY_TYPED 用于可以转换为Unicode 字符的东西,这是不行的。

如果扩展键码仍然不足以识别您正在按下的内容,则需要使用扫描码,该码存在于KeyEvent 中,但由于它是私有字段而无法访问。 this answer 中有一个很好的反射魔法,可以让你获得扫描码。

This list of key codes 可能会对您有所帮助。您正在处理“不可映射”列表中的某些内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2014-09-15
    • 2019-09-07
    • 2012-08-29
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多