在 C++ (Windows) 中是否有一种优雅的方式来获取虚拟键代码的字符串表示形式(例如 VK_NUMPAD0、VK_F6、VK_INSERT、VK_RSHIFT 等)并将其转换为相应的十六进制值(例如 0x60、0x75、0x2D、0xA1、 ETC。)?目前,我知道使用 switch 语句、if 语句、map 等会起作用(我正在使用这种技术),但这些都显得笨重和不优雅(它们是“硬编码”的,可能不是最通用的)解决方案。我想一定有一些专门为这种任务设计的 API。
我检查了 MSDN 文档中可能有帮助的任何 API,但我发现的最接近的是 VkKeyScan、MapVirtualKey 和 ToAscii,但这些似乎都不是我想要的(或者至少我不知道使用它们的组合)。我知道我错过了一些东西,可能只是不知道要寻找的正确想法。
期望(伪代码):
auto key_pressed = GetVkFromString("VK_F6"); // gets 0x75
同样,是否有跨平台解决方案?我知道 VK_ 常量是特定于 Windows 的,但我很想知道是否有可在多个平台(包括 Windows)上工作的替代解决方案。我现在不需要支持他们,但我总是想记住这一点。
万一有人问这是否是 X vs Y 问题或类似问题,原因是我们使用的是半用户友好的配置文件(JSON),它允许我们应用程序中的各种命令绑定到键(和如果用户选择,则更改)。我们希望这个文件是一个相对容易编辑的文件,而不需要像十六进制那样在其中放入笨拙的数据类型。