我在搜索如何测试是否按下某个键。测试不应该阻止程序。我可以使用一个小型库,如果它不是太重,但不幸的是,ncurses是太多的依赖关系带来。测试在Linux上是否没有阻止键被按下
2
A
回答
1
我找到了一个解决方案:
int khbit() const
{
struct timeval tv;
fd_set fds;
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
return FD_ISSET(STDIN_FILENO, &fds);
}
void nonblock(int state) const
{
struct termios ttystate;
tcgetattr(STDIN_FILENO, &ttystate);
if (state == 1)
{
ttystate.c_lflag &= (~ICANON & ~ECHO); //Not display character
ttystate.c_cc[VMIN] = 1;
}
else if (state == 0)
{
ttystate.c_lflag |= ICANON;
}
tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
}
bool keyState(int key) const //Use ASCII table
{
bool pressed;
int i = khbit(); //Alow to read from terminal
if (i != 0)
{
char c = fgetc(stdin);
if (c == (char) key)
{
pressed = true;
}
else
{
pressed = false;
}
}
return pressed;
}
int main()
{
nonblock(1);
int i = 0;
while (!i)
{
if (cmd.keyState(32)) //32 in ASCII table correspond to Space Bar
{
i = 1;
}
}
nonblock(0);
return 0;
}
它运作良好。感谢您的帮助。我希望它能帮助别人:)
+0
它为没有根的人工作,谢谢!如果你正在主动等待一个按键被按下(这不是我的情况,所以我不需要),请不要忘记'usleep()'一点,并且不要忘记恢复回显状态使用后:'ttystate.c_lflag | = ICANON | ECHO;'in'nonblock()'。 – Shlublu 2017-09-14 14:54:29
0
我不知道你究竟是什么是寻找。
我最近做证明的概念从“原始”输入设备节点在这里阅读:boost::asio read from /dev/input/event0。这个例子是用鼠标,但Linux内核统一输入设备,所以键盘大致相同。
您所需要的只是UNIX权限来打开/读取设备文件(如果您的部署风格更方便,可以将它们创建为out-of-/ etc-tree)。
该示例显示了事件
我已经使用绑定XTEST(
libxtst
)的全异步处理(实际上发送键击);我想,这可能包含你需要功能再有就是XINPUT它(据我可以告诉)构成Xorg的方式来抽象的“原始”输入设备流我在第一个选项描述
相关问题
- 1. 如何测试div是否被阻止
- 2. 有没有办法检测一个键是否被按下?
- 3. 检测BlackBerry按键球/按键是否被按下?
- 4. 如何检测是否有任何按键被按下
- 5. 非阻塞“键按下”测试用C
- 6. 检查是否没有按键被按下
- 7. 如何检查一个键是否在Linux中被按下?
- 8. 有没有什么功能知道键盘按键是否被按下?
- 9. 如何测试SQL注入是否被阻止?
- 10. 如何测试预测键盘是否在Android上被禁用?
- 11. 如何无休止地检查按键是否被按下?
- 12. 测试是否没有单选按钮
- 13. 如何检测Windows按键是否被按下?
- 14. 如何检测某个特定按键是否被按下?
- 15. 如何检测Java 2d中的按键是否被按下?
- 16. jQuery - 检测按钮是否被按下
- 17. 试图检测一个按钮是否被按下约3秒
- 18. 如何检测是否有任何键盘功能键被按下?
- 19. 如何测试一个命名窗口是否被打开或被弹出窗口阻止程序阻止?
- 20. 在Golang中,http.HandleFunc是否被阻止?
- 21. 检查ALT键是否被按下
- 22. 检查某个键是否被按下?
- 23. 确定修改键是否被按下
- 24. xlib XNextEvent检查键是否被按下
- 25. 检查DELETE键是否被按下?
- 26. 检查键是否被按下硒
- 27. 在Linux上阻止IMAP,POP
- 28. 测试按钮是否已被点击
- 29. 如何检查一次是否有多个按键被按下?
- 30. JavaFX:如何检测键是否被按下?
这是题外话题,因为你问我们的代码/教程 – 2015-01-15 16:43:04
_“我不能使用ncurse。”_为什么?无论如何,你可以看看他们的消息来源,掌握他们是如何做到的。 – 2015-01-15 16:48:07
@πάνταῥεῖ可能是因为它太重了?从这个问题:“我可以使用小lib,如果他们不是太重” – Borgleader 2015-01-15 16:51:30