C++;读取键盘事件 我是C++新手,我正在尝试编写一个程序,可以读取击键。这是我创建的一个函数,用于查找某个键 void printKey(short vk) { if ((GetAsyncKeyState(vk) >> 15) & 1) { LPWSTR key; GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key)); wcout << key; } }
范围48-90适用于所有字母和数字键。这个想法是,每当我按下一个键,它应该打印到控制台 我很有信心问题就在这段代码中C++;读取键盘事件 我是C++新手,我正在尝试编写一个程序,可以读取击键。这是我创建的一个函数,用于查找某个键 void printKey(short vk) { if ((GetAsyncKeyState(vk) >> 15) & 1) { LPWSTR key; GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key)); wcout << key; } },c++,winapi,keyboard,C++,Winapi,Keyboard,范围48-90适用于所有字母和数字键。这个想法是,每当我按下一个键,它应该打印到控制台 我很有信心问题就在这段代码中 LPWSTR key; GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key)); wcout << key; LPWSTR键; GetKeyNameTextW(MapVirtualKeyW(vk,MAPVK_vk_TO_CHAR)除了上面的注释外,GetK
LPWSTR key;
GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key));
wcout << key;
LPWSTR键;
GetKeyNameTextW(MapVirtualKeyW(vk,MAPVK_vk_TO_CHAR)除了上面的注释外,GetKeynameText
还需要一个键名缓冲区,因此不需要:
LPWSTR key;
GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key));
LPWSTR键;
GetKeyNameTextW(MapVirtualKeyW(vk,MAPVK_vk_TO_CHAR)在旁注中,if((GetAsyncKeyState(vk)>>15)&1)
也可以写成if(GetAsyncKeyState(vk)&0x8000)
或if(GetAsyncKeyState(vk)<0)
此外,ASCII范围48..90中不仅有字母和数字,还有标点符号。ASCII字母和数字与其对应的虚拟键代码具有相同的数值,但ASCII范围58-64中的虚拟键未定义,因此循环正在将一些无效的虚拟键传递给GetAsyncKeyState()
。请注意,GetKeyNameText
的最后一个参数是以字符表示的,而不是以字节表示的,因此在调用Unicode版本时,单独使用sizeof(key)
本身是错误的。请使用\u countof(key)
或同等版本。刷新它的作用是什么,以及您是如何获得大小128的?刷新wcout
会写出任何缓冲字符,以确保您看到它们。128,我编的。它需要“足够长”。
LPWSTR key;
GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key));
WCHAR key [128];
GetKeyNameTextW(MapVirtualKeyW(vk, MAPVK_VK_TO_CHAR) << 16, key, sizeof(key) / sizeof (WCHAR));