从WM_KEYDOWN消息中唯一标识密钥

时间:2011-09-05 17:42:51

标签: winapi keyboard keypress scancodes

我尝试使用wParam提供的虚拟密钥代码,但是效果不好:

  • 映射到相同密钥代码的多个密钥
  • 根本没有识别出某些键
  • 虚拟键似乎适应了键盘布局(我不想要/不需要)

然后我看到lParam会给我一个扫描码以及一个“扩展”标志,当这样计算时,它似乎会为键盘上的每一个键产生不同的值:

value = (lParam & 0x01FF0000) >> 16;

对于键盘上的相同键,即使在各种键盘/系统中,该值是否始终相同?

1 个答案:

答案 0 :(得分:1)

不同键盘的扫描码可能不同。最好使用虚拟键码。来自http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx

  

分配给键盘上的每个键是一个称为扫描的唯一值   代码,键盘上键的设备相关标识符。一个   当用户键入一个键时,键盘会生成两个扫描码   当用户释放密钥时,用户按下键和另一个键。

     

键盘设备驱动程序解释扫描代码并进行翻译   (映射)它到虚拟键代码,由与之定义的设备无关值   识别密钥用途的系统。