【问题标题】:Difference between C++ Keyboard keycode and JAVA KeyEvent keycodeC++ 键盘键码和 JAVA KeyEvent 键码之间的区别
【发布时间】:2010-05-09 18:40:14
【问题描述】:

我注意到 C++ 中的 vkCode 提供的键码与 Java 的 KeyEvent 提供的键码之间存在差异。 (当然,普通字符具有相同的代码(0 => 48,就像 ASCII 一样),但它们在其他键上有所不同)。 有没有办法将它们从一个“翻译”到另一个(每个背后的逻辑是什么?)或者我应该为此使用大量的开关和 IF。 如果有帮助,我的应用程序一半是 C++,一半是 JAVA,因为 c++ 提供了本机 Hooks,它获取用户按下的键的键码,然后 java 将使用它们。

提前致谢。

【问题讨论】:

  • 标准 C++ 没有任何称为“vkCode”的概念 - 也许您正在考虑一些特定于平台的库?如果有,请说出是哪一个。
  • 嗯,有点。我正在使用 windows.h,vkCode 来自这里: ((KBDLLHOOKSTRUCT*)lparam)->vkCode //假设 lparam 是钩子需要的 LPARAM 参数。

标签: java c++ windows keycode keyevent


【解决方案1】:

或者我应该使用大量的开关和 IF

你可以把它们放在一个lookup table中,也就是把Java KeyCodes放在一个大数组中,所以你只需要javaKeyCode = keyLut[cppScanCode]

扫码列表可以在here找到,VK_KEYCODES当然可以在the API docs for KeyEvent找到。

Java 被设计为独立于平台的,因此无论扫描代码如何,按左键总是会产生VK_LEFT。我不完全确定,但我想 C++ 扫描码取决于硬件。

【讨论】:

  • 谢谢。我想这是我唯一的希望。我以前没有真正使用过 Lut,Netbeans IDE 告诉我它来自 Java.Awt.Image。那个对吗?
  • 不不,查找表与 api 无关。它只是将简单函数编码为数组的一种方式。
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 2013-02-25
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多