它们真的是虚拟代码吗?

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类

Vik*_*pov 3

我应该说,虚拟按键代码是非常虚拟的。

对于您尝试互操作的每个平台,如果没有一些代码(如 JavaKeyToWin32Key、Win32KeyToJava 等),您将无法逃脱。

我相信所有这些键码大多都是历史性的。有些来自硬件设计决策(看看苹果的“现代”关键代码,其中 0 代码是“A”,1 是“S”,2 是“D”等等 - 我应该继续还是你得到“模式” “这是键盘布局的结果?)。

“为什么没有标准?”

这是生意,没有什么私人的。三四十年前,每个人都从头开始开发自己的硬件,二十五年前,每个人都在努力制造最好的CPU,十五年前,一切都从“平台”开始,一切都再次被重新定义,但也应该保持与现有解决方案的兼容性(当然是同一家公司的解决方案)。

Java 是一个标准,但并不适合所有人。它已经是所有操作系统之上的一个抽象,拥有自己的一组键码。所以“VK_”是微软的遗产,Java关键代码可能受到Sun Solaris操作系统的影响,但我不确定。