实时键盘输入控制台(在Windows中)

Real-time keyboard input to console (in Windows)?

本文关键字:Windows 键盘 输入 控制台 实时      更新时间:2023-10-16

我有一个双链列表类,我想在用户键入字符时向列表中添加字符,或者在用户每次按退格键时删除列表中的最后一个节点,同时在控制台实时显示结果。

我应该使用什么函数来拦截单个键盘输入,并将其实时显示到控制台?所以结果如下:

用户开始输入:

Typ_

用户停止输入:

在屏幕上输入这个_

用户按退格键5次:

在s_

上输入

特定的操作系统是windows(更具体地说是vista)。

作为旁注,windows.h下的GetAsyncKeyState似乎可能用于键盘输入,但是控制台的实时显示问题仍然存在。

c++没有"键盘"的概念。它只有一个名为"stdin"的不透明文件,您可以从中读取。但是,该"文件"的内容由您的环境填充,特别是由您的终端填充。

大多数终端在将输入行发送到附加进程之前对其进行缓冲,因此您永远不会看到退格的存在。你真正需要的是直接控制终端。

这是一个非常依赖于平台的过程,如果你想要特定的建议,你必须指定你的平台。在Linux上,请尝试ncursestermios

您可能会感到惊讶,但这段代码可以满足您的要求:

/* 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)并从列表中删除最后一个字符