【问题标题】:difference between virtual code and scan code虚拟码和扫码的区别
【发布时间】:2012-10-05 04:00:28
【问题描述】:

Virtual Key CodeScan Code 有什么区别。我阅读了有关扫描码here 的信息,但我不明白虚拟代码的用途以及扫描代码与虚拟代码有何不同?

例如在 Java 中:

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       
   int code = evt.getKeyCode(); // WHAT DO I GET ? A Scan code or a Virtual Code..?
}

C 中:

KBDLLHOOKSTRUCT *kbhook = (KBDLLHOOKSTRUCT *) lParam;
printf("%u\n",kbhook->vkCode); // WHAT DO I GET ? A Scan code or a Virtual Code..?

以上只是例子,我不想在此基础上阐明概念。

【问题讨论】:

  • IIRC,扫描码可以变化,所以 vk 码是一种将实际上是相同键的不同扫描码变成一个统一码的方法。另一方面,我的记忆可能完全不正常了。
  • 简单地说,虚拟键码是硬件独立的,而扫描码是硬件相关的
  • @Vulcan 你确定,它们是虚拟代码吗?
  • @SuhailGupta 对于 Java 示例,绝对是。对于 C 示例,我很确定,特别是因为该字段被称为“vkCode”,意思是虚拟键代码。
  • @Vulcan 阅读最多评论@stackoverflow.com/questions/10848901/…

标签: java c++ c scancodes


【解决方案1】:

扫描代码表示特定键的硬件相关代码,但虚拟代码表示同一键的硬件无关和操作系统相关代码。 所以作为程序员,我们应该一直使用虚拟代码……

现在让我们来看看 Java 和 C++。 VK_ 关键字是微软定义的,Java 使用自己的 VK_ 关键字...因此它们可能引用相同的字符代码,但它们的值不同。

【讨论】:

  • “总是” - 只有西斯会做绝对的事情。是的,您通常应该使用 VK 码,但扫描码也有它们的位置。就像您需要使用 SendInput 在较低级别模拟键盘时一样(作为一个示例)。我敢肯定在其他情况下扫描码也会有所帮助。
  • 应首选扫描码的示例 - 游戏:键绑定应链接到物理位置,以便它们不会更改,如果手册说按“波浪号键,esc 下方的那个键” “然后使用扫描码在大多数情况下都会做正确的事情,比如在 idTech 游戏引擎上。虚幻引擎弄错了,我记得找到控制台键的挫败感,不得不按下键盘上的所有按钮才能确定它是哪一个。
猜你喜欢
  • 2015-11-03
  • 2016-01-09
  • 2011-03-03
  • 2017-07-04
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 2017-12-12
相关资源
最近更新 更多