如何检测 C++ 中的组合键输入?
Posted
技术标签:
【中文标题】如何检测 C++ 中的组合键输入?【英文标题】:How to detect combined key input in C++? 【发布时间】:2020-12-11 11:00:50 【问题描述】:假设您在计算机上玩游戏,使用箭头键或 WASD 移动角色,假设您按住 向上箭头 键/W 和 向左箭头 键/A 一起,如果游戏允许,你的角色会在两者之间移动 >,即使您按住两个中的一个然后另一个之后,同时继续按住第一个,2个中的一个都不会被打断然后忽略。
我知道如何检测用户是否按下了箭头键/字母,
#include <iostream>
#include <conio.h>
using namespace std;
int main()
while (1)
int ch = getch();
if (ch == 224)
ch = getch();
switch (ch)
case 72: cout << "up\n"; break;
case 80: cout << "down\n"; break;
case 77: cout << "right\n"; break;
case 75: cout << "left\n"; break;
default: cout << "unknown\n";
else
cout << char(ch) << '\n';
但我找不到方法来做我在这个问题开头提到的事情
感谢任何尝试提供帮助
【问题讨论】:
添加了windows 标签,因为conio.h
是一个MS-DOS 库。如果它不正确,请随时恢复它。
如果确实是windows,那么***.com/questions/2067893/c-console-keyboard-events或者问题实际上是关于DOS的?
@Yksisarvinen,我实际上是在 Visual Studio 2019 中的 Windows 中编写代码,但我不是在编写 Windows 程序,我不使用 WinAPI,我认为是跨平台的,而不是 getch()
我使用_getch()
bcs 否则我会出错
跨平台 C++ 只有基于行的字符 I/O(conio.h 不是标准头文件)。即使无需每次都按 Enter 键来获取单个字符,也取决于平台。更不用说允许您识别同时按键的按键事件了。所以...我猜是选一个平台?
【参考方案1】:
即使conio.h
函数级别相当低,它们也不足以满足您的要求:您不想从控制台缓冲区中提取字符(getch
所做的)但知道状态(按下/释放) 的一些键。
所以你应该直接使用WINAPI函数GetKeyState。你的程序将不再兼容 MS/DOS,但我认为这在 2020 年不是一个真正的问题......
【讨论】:
以上是关于如何检测 C++ 中的组合键输入?的主要内容,如果未能解决你的问题,请参考以下文章