2011-09-05 54 views
0

我试图用通过wParam中提供的虚拟键码,但是这并不能很好地工作:确定关键唯一从WM_KEYDOWN消息

  • 映射到相同键代码
  • 某些键是多个按键在所有
  • 虚拟按键无法识别似乎适应

然后我看到的lParam会给我一个扫描码与“扩展”沿着键盘布局(这是我不希望/需要)国旗,whi CH似乎这样当计算出在键盘上每一个按键产生一个不同的值:

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

将这个值永远是在键盘上相同的密钥相同,甚至在不同的键盘/系统?

回答

1

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

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

键盘设备驱动程序解释扫描码并将其映射到虚拟键代码,该虚拟键代码是由标识密钥用途的系统定义的与设备无关的值。