低级控制台输入函数

重要

本文档介绍控制台平台功能,该功能已不再是生态系统蓝图的一部分。 我们不建议在新产品中使用此内容,但我们未来将无限期支持现有使用。 我们的首选最新解决方案侧重于虚拟终端序列,以实现跨平台方案中的最大兼容性。 可以在经典控制台与虚拟终端文档中找到有关此设计决策的详细信息。

低级控制台输入函数缓冲区包含输入记录,这些记录可以包括关于键盘、鼠标、缓冲区大小调整、焦点和菜单事件的信息。 通过低级函数可直接访问输入缓冲区,与筛选和处理输入缓冲区数据的高级函数不同,后者放弃除键盘输入外的所有输入。

有五个低级函数可用于访问控制台的输入缓冲区:

ReadConsoleInputPeekConsoleInputWriteConsoleInput 函数使用 INPUT_RECORD 结构读取或写入输入缓冲区。

下面是关于低级控制台输入函数的说明。

函数 说明
ReadConsoleInput 从输入缓冲区读取和删除输入记录。 在至少有一条输入记录可读取之前,该函数不会返回值。 然后,所有可用记录将传输到调用进程的缓冲区,直到没有更多记录可用,或已读了取指定的记录数。 对于下一次读取操作,未读记录将保留在输入缓冲区中。 该函数报告已读取的记录总数。 有关使用 ReadConsoleInput 的示例,请参阅读取输入缓冲区事件
PeekConsoleInput 读取而不删除输入缓冲区中挂起的输入记录。 不超过指定数量的所有可用记录都将复制到调用进程的缓冲区中。 如果没有记录可用,则函数立即返回。 该函数报告已读取的记录总数。
GetNumberOfConsoleInputEvents 确定输入缓冲区中的未读输入记录的数量。
WriteConsoleInput 将输入记录置于缓冲区中任何挂起记录之后的输入缓冲区。 如果需要,输入缓冲区会动态增长,以容纳写入的记录数。 要使用此函数,指定的输入缓冲区句柄必须具有 GENERIC_WRITE 访问权限。
FlushConsoleInputBuffer 放弃输入缓冲区中的所有未读事件。 要使用此函数,指定的输入缓冲区句柄必须具有 GENERIC_WRITE 访问权限。

应用程序进程的线程可以执行等待操作,以等待输入在输入缓冲区中可用。 要发起等待操作,请在调用任何等待函数时指定输入缓冲区的句柄。 当发出一个或多个对象的信号时,这些函数可以返回。 当控制台输入句柄的输入缓冲区中存在未读记录时,控制台输入句柄的状态将变为已发出信号。 当输入缓冲区变为空时,状态将重置为未发出信号。 如果没有可用的输入,调用线程将进入有效的等待状态,在等待满足等待操作的条件时消耗极少的处理器时间。