【问题标题】:How to get the current Virtual Key Code via WinUser.h?如何通过 WinUser.h 获取当前的虚拟键码?
【发布时间】:2012-12-04 22:39:23
【问题描述】:

我正在使用 WinUser.h,需要知道是否有一种简单的方法可以获取键盘上按下的任何键的虚拟键。

我已经尝试过 GetAsyncKeyState(),它工作正常,但我需要返回实际的虚拟键,而不是运行一长串 GetAsyncKeyState() 调用来检查键盘上的每个键。

我本质上是在创建一个允许用户映射他们的控件的系统,这就是为什么如果我能够获得虚拟键然后对不允许的键进行检查会更理想。

此外,C++ 是所使用的语言。感谢您在此问题上提供的任何帮助。

【问题讨论】:

  • 为什么不使用预建的注册表项呢?有一个映射键的条目。但是,如果您打算自己做,那么钩子可以访问 VK 代码,无论是窗口的消息钩子还是键盘钩子。
  • 告诉您按下某个键的消息 WM_KEYDOWN 始终使用虚拟键代码。

标签: c++ windows key virtual


【解决方案1】:

您几乎肯定想要响应 WM_KEYDOWN/WM_KEYUP 或(更有可能)WM_CHAR 消息。 WM_CHAR 在 TranslateMessage 完成工作后给你结果,所以这是你通常想要的。它会为您提供翻译后的虚拟键代码按下的键的扫描代码,以备您需要时使用。

【讨论】:

  • 所以我在这里查看了 WM_KEYDOWN:msdn.microsoft.com/en-us/library/windows/desktop/… 和这里使用的示例msdn.microsoft.com/en-us/library/windows/desktop/…,但它实际上并没有返回虚拟键的值。大部分系统已经到位。密钥存储在用户设置的保存文件中 DWORD 的第一个字节中。我只需要获取虚拟键的字节值,以便将其传递给将其设置为特定 DWORD 的函数。
  • 你是说收到消息时wParam不包含虚拟键码?
  • 好的,谢谢你的帮助,杰瑞。这是一个相当大而复杂的系统,我真的不知道这些消息存储在哪里,目前无法弄清楚如何访问这些信息。我将使用您的建议进一步研究它,但在最坏的情况下,我将坚持我为每个允许的键调用 GetAsyncKeyState() 的原始实现。我知道这是有效的,我只是在寻找一种更清洁的处理方式。
  • @AndrewA.Ernst:您处理 WM_KEYDOWN 的代码收到一条消息(以MSG 结构的形式)。您只是在寻找该结构的 wParam 成员。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
相关资源
最近更新 更多