Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++;读取键盘事件 我是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

范围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)除了上面的注释外,
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));