Suh*_*pta 5 c c++ java keycode
与C++/C相比,某些键(如shift,[,],Del等)的虚拟键代码在java中显示为不同的值.例如 :
Key Java C / C++
Shift 16 160
[ 91 219
] 93 221
\ 92 220
Del 127 46
Window 524 91
Run Code Online (Sandbox Code Playgroud)
这是什么原因?这些代码是虚拟代码还是不同类型?对于包括字母,数字,功能键(F1-F12),退格键,`等的键是相同的.
我可能误解了一个概念,在这种情况下请澄清一下.
签入C/C++
KBDLLHOOKSTRUCT * kbhook = (KBDLLHOOKSTRUCT *) lParam;
printf("%u\n",kbhook->vkCode);
Run Code Online (Sandbox Code Playgroud)
用Java检查
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
int code = evt.getKeyCode();
// code isEqualTo KeyEvent.VK_DELETE : NOTE
}
Run Code Online (Sandbox Code Playgroud)
参考:KeyEvent类
我应该说,虚拟按键代码是非常虚拟的。
对于您尝试互操作的每个平台,如果没有一些代码(如 JavaKeyToWin32Key、Win32KeyToJava 等),您将无法逃脱。
我相信所有这些键码大多都是历史性的。有些来自硬件设计决策(看看苹果的“现代”关键代码,其中 0 代码是“A”,1 是“S”,2 是“D”等等 - 我应该继续还是你得到“模式” “这是键盘布局的结果?)。
“为什么没有标准?”
这是生意,没有什么私人的。三四十年前,每个人都从头开始开发自己的硬件,二十五年前,每个人都在努力制造最好的CPU,十五年前,一切都从“平台”开始,一切都再次被重新定义,但也应该保持与现有解决方案的兼容性(当然是同一家公司的解决方案)。
Java 是一个标准,但并不适合所有人。它已经是所有操作系统之上的一个抽象,拥有自己的一组键码。所以“VK_”是微软的遗产,Java关键代码可能受到Sun Solaris操作系统的影响,但我不确定。