实时键盘输入控制台(在Windows中)
Real-time keyboard input to console (in Windows)?
我有一个双链列表类,我想在用户键入字符时向列表中添加字符,或者在用户每次按退格键时删除列表中的最后一个节点,同时在控制台实时显示结果。
我应该使用什么函数来拦截单个键盘输入,并将其实时显示到控制台?所以结果如下:
用户开始输入:
Typ_
用户停止输入:
在屏幕上输入这个_
用户按退格键5次:
在s_
上输入
特定的操作系统是windows(更具体地说是vista)。
作为旁注,windows.h下的GetAsyncKeyState似乎可能用于键盘输入,但是控制台的实时显示问题仍然存在。
c++没有"键盘"的概念。它只有一个名为"stdin"的不透明文件,您可以从中读取。但是,该"文件"的内容由您的环境填充,特别是由您的终端填充。
大多数终端在将输入行发送到附加进程之前对其进行缓冲,因此您永远不会看到退格的存在。你真正需要的是直接控制终端。
这是一个非常依赖于平台的过程,如果你想要特定的建议,你必须指定你的平台。在Linux上,请尝试ncurses
或termios
。
您可能会感到惊讶,但这段代码可以满足您的要求:
/* getchar example : typewriter */
#include <stdio.h>
int main ()
{
char c;
puts ("Enter text. Include a dot ('.') in a sentence to exit:");
do {
c=getchar();
putchar (c);
} while (c != '.');
return 0;
}
您可以使用ReadConsoleInput
,将传入字符添加到列表中,查找退格键(INPUT_RECORD->KEY_EVENT_RECORD)。wVirtualScanCode == VK_BACKSPACE)并从列表中删除最后一个字符
相关文章:
- 使用 Windows API c++ 的键盘输入
- 如何覆盖Windows键盘快捷键
- 显示和隐藏Windows 10屏幕键盘(osk.exe)时遇到问题
- 如何监控Android和iOS上的所有击键操作,如Windows键盘记录器
- 如何在Windows中仅为平板电脑模式启动Qt虚拟键盘
- Windows SetFocus,目标窗口不会捕获键盘输入
- 如何在Windows 8中以编程方式触发鼠标和键盘事件
- windows应用程序中的键盘类实现
- 如何在控制台应用程序中使用GetMessage()使用Windows API识别C++中的键盘输入
- 在Windows 8上显示虚拟键盘
- 如何在 Windows 8 上捕获触摸键盘加载事件
- 处理对话框上的键盘输入 - Windows
- Windows Phone:显示软件键盘后重新布局
- Windows:如何在低级键盘挂钩中查询修饰键的状态
- Windows - 从消息队列中删除与键盘相关的消息
- 如何在Windows(c++)中更改语言键盘布局
- 如何在用户更改Windows中的语言键盘布局时得到通知
- 如何在Linux和Windows上的Qt中模拟所有鼠标和键盘事件
- 如何保持Qt小部件响应键盘和鼠标,同时处理Windows事件
- 如何将键盘事件发送到windows中的各种应用程序