【发布时间】:2020-03-28 18:53:12
【问题描述】:
我用 C/C++ 编写了一个小型按键记录器,旨在捕获所有按下的按键。但是,我无法捕获一些特殊键,例如 ; : [ ] \ / ? " ' .
假设我想捕获 ; 或 : 键。 目前,我在无限循环中有以下代码sn-p:
if (GetAsyncKeyState(0xBA) == -32767)
{
//the statements inside the if clause are not executed when the key is pressed
std::ofstream write("Record.txt", ios::app);
if (GetAsyncKeyState(0x10))
write << ":";
else
write << ";";
}
其中 0x10 是“SHIFT”虚拟键 (VK_SHIFT) 的代码,VK_OEM_1 (0xBA) 是 ; 的虚拟键,如 Microsoft Docs 中所述:https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes。
据我所知,GetAsyncKeyState 函数在刚刚释放键后返回 -32767。
上述代码适用于其他虚拟键或简单键,如 ASCII 表中所述(例如,GetAsyncKeyState(48) 适用于 0 键,GetAsyncKeyState(VK_RETURN) 适用于 ENTER 键等等。
我已经尝试为GetAsyncKeyState 函数输入以下参数:
- ';' 的 ASCII 码,即 59
- ';'人物
- VK_OEM_1 - 虚拟密钥
- 0xBA - 十六进制的虚拟键值
- 186,正如我在这里找到的:https://www.amibroker.com/guide/afl/getasynckeystate.html。
当按下 ';' 键时,没有任何参数使函数返回 -32767。
您是否知道我应该如何使用该功能来捕获该键以及因此我的方法未捕获的所有其他键 ( [ ] \ / ?" ' 。 )?
P.S:我使用的是标准英语(美国)键盘布局。
提前致谢!
【问题讨论】:
-
它返回 2 位信息,位 #0 和位 #15。测试一个键是否关闭的最简单方法是使用 GetAsyncKeyState(key)
-
之前试过,没有成功。