gpt4 book ai didi

c++ - Windows 虚拟键代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:31 29 4
gpt4 key购买 nike

我如何实现像 std::string VirtualKeyCodeToStdString(UCHAR key) 这样返回虚拟键描述的函数?

示例:输入为VK_CAPITAL,返回值为std::string("Caps Lock")

最佳答案

将 VK 代码转换为 key 的文本表示的一种简单方法是:

  1. 使用MapVirtualKey将VK码转换为扫码。
  2. 进行位移以将该值转换为长整数,其中第 16-23 位是扫描码
  3. 使用 GetKeyNameText 获取 key 的名称。

例如:

WCHAR name[1024];
UINT scanCode = MapVirtualKeyW(VK_CAPITAL, MAPVK_VK_TO_VSC);
LONG lParamValue = (scanCode << 16);
int result = GetKeyNameTextW(lParamValue, name, 1024);
if (result > 0)
{
std::wcout << name << endl; // Output: Caps Lock
}

如果您这样做是为了响应 WM_KEYDOWN 或其他通过 LPARAM 中的扫描代码的消息,您可以跳过前两个步骤,因为它们是就在那里将 VK 代码修改为格式正确的 GetKeyNameText 输入。有关 GetKeyNameText 的第一个参数的功能和格式的更多信息,请参阅 documentation at MSDN

注意:我在 API 调用中使用了 W 变体,因此您实际上需要使用 std::wstring 来传递键名,但您可以轻松更改它使用 A 版本。此外,如果您需要传递键盘布局以获得正确的扫描代码,您可以使用 MapVirtualKeyEx

关于c++ - Windows 虚拟键代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38100667/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com