【发布时间】:2012-06-01 10:51:03
【问题描述】:
shift、[、]、Del 等键的虚拟键代码在 java 中显示为与 C++/C 不同的值。例如:
Key Java C / C++
Shift 16 160
[ 91 219
] 93 221
\ 92 220
Del 127 46
Window 524 91
这是什么原因?这些代码是虚拟代码还是它们是不同的类型?对于包括字母、数字、功能键(F1-F12)、退格、`等的按键都是一样的。
我可能误解了一个概念,在这种情况下请澄清。
已在 C/C++ 中检查
KBDLLHOOKSTRUCT * kbhook = (KBDLLHOOKSTRUCT *) lParam;
printf("%u\n",kbhook->vkCode);
在 Java 中检查
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
int code = evt.getKeyCode();
// code isEqualTo KeyEvent.VK_DELETE : NOTE
}
【问题讨论】:
-
对于
[、]、`\` 和 Del,这些 Java 代码是这些键的 ASCII 值。为什么它们应该是虚拟的?你从 Windows 钩子函数得到的结果似乎是扫描码。 -
那些不是 C/C++ 代码,那些是 WinAPI 代码。它们不用于其他平台上的 C 或 C++,其他基于 WinAPI 的应用程序(例如使用 Delphi 构建)使用相同的代码。
-
它们是否相同有关系吗?它们用于识别某些键(通过将它们与常量进行比较 - 例如 java 中的
KeyEvent.VK_X)。我唯一能想到的问题是Java应用程序是否通过转发关键事件以某种方式与C++应用程序通信。然后,您要么必须将代码解析为统一代码,要么在转发它们之前将它们翻译到其他系统。 -
@brimborium 是的,我想要一个 b/w c++->java 的通信