控制台的输入缓冲区包含可包含有关键盘,鼠标,缓冲区大小调整,焦点和菜单事件的信息的输入记录。低级功能提供对输入缓冲区的直接访问,与过滤和处理输入缓冲区数据的高级功能不同,仅丢弃键盘输入。
Win32 API提供了五个低级功能来访问控制台的输入缓冲区:
*GetNumberOfConsoleInputEvents
ReadConsoleInput,PeekConsoleInput和WriteConsoleInput函数使用INPUT_RECORD结构来读取或写入输入缓冲区。
以下是低级别控制台输入功能的说明。
功能 | 描述 |
ReadConsoleInput | 从输入缓冲区读取和删除输入记录。至少有一条记录可以读取,该函数才会返回。然后,所有可用的记录都将被传送到调用进程的缓冲区,直到没有更多记录可用或已读取指定数量的记录为止。未读记录保留在输入缓冲区中用于下一次读操作。该函数报告已读取的记录总数。有关使用ReadConsoleInput的示例,请参阅读取输入缓冲区事件. |
PeekConsoleInput | 读取而不删除输入缓冲区中的待处理输入记录。所有可用的记录,直到指定的号码被复制到调用进程的缓冲区。如果没有可用的记录,该函数将立即返回。该函数报告已读取的记录总数。 |
GetNumberOfConsoleInputEvents | 确定输入缓冲区中未读输入记录的数量。 |
WriteConsoleInput | 将输入记录放入缓冲区中任何待处理记录后面的输入缓冲区。如果需要,输入缓冲区会动态增长,以保存所写入的记录数量。要使用此函数,指定的输入缓冲区句柄必须具有GENERIC_WRITE访问权限。 |
FlushConsoleInputBuffer | 丢弃输入缓冲区中的所有未读事件。要使用此函数,指定的输入缓冲区句柄必须具有GENERIC_WRITE访问权限。 |
应用程序进程的线程可以执行等待操作,等待输入在输入缓冲区中可用。要启动等待操作,请在调用任何等待功能时指定输入缓冲区的句柄。当发送一个或多个对象的状态时,这些功能可以返回。当输入缓冲区中有未读记录时,控制台输入句柄的状态将发出信号。当输入缓冲区为空时,状态将重置为非信号状态。如果没有输入可用,则呼叫线程进入有效的等待状态,在等待等待操作的条件得到满足时消耗很少的处理器时间。