从 WM_KEYDOWN 消息中唯一识别密钥

发布于 2024-12-03 07:38:28 字数 307 浏览 1 评论 0原文

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

  • 多个键映射到相同的键代码
  • 某些键根本无法识别
  • 虚拟键似乎适应了键盘布局(我不这样做) '不想要/需要)

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

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

这个值是否总是相同的对于键盘上的同一个键,即使跨各种键盘/系统?

I tried to use the virtual key code provided by wParam, however that didn't work very well:

  • multiple keys mapped to the same key code
  • some keys were not recognized at all
  • virtual keys seemed to be adapted to the keyboard layout (which i don't want/need)

Then i saw that the lParam will give me a scancode along with an "extended" flag, which seem to produce a different value for every single key on the keyboard when calculated like this:

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

Will this value always be identical for the same key on the keyboard, even across various keyboards/systems?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

埋葬我深情 2024-12-10 07:38:28

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

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

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

Scancodes can be different for different keyboards. Best to use virtual key codes. From http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx:

Assigned to each key on a keyboard is a unique value called a scan
code, a device-dependent identifier for the key on the keyboard. A
keyboard generates two scan codes when the user types a key—one when
the user presses the key and another when the user releases the key.

The keyboard device driver interprets a scan code and translates
(maps) it to a virtual-key code, a device-independent value defined by
the system that identifies the purpose of a key.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文