Windows Console API

控制台由一个输入缓冲区和一个或多个屏幕缓冲区组成。 输入缓冲区包含输入记录的队列,其中每个队列都包含有关输入事件的信息。
输入队列始终包含按键和键释放事件。 它还可能包含鼠标事件 (指针移动、按钮按下和释放) 和事件,用户操作在此期间影响活动屏幕缓冲区的大小。
屏幕缓冲区是一个在控制台窗口中输出的二维字符和颜色数据数组。 任意数量的进程都可以共享控制台。

对Console的理解

官方一般都是长篇大论,这里记录一下我对Console的理解:

Console主要包括两个部分:

  • InputBufferArea
  • OutputBufferArea

所以对Console而言,其内部就是多个封装好的内存空间需求按照一定的规则使用而已。针对Console的函数主要包括以下几个:

对Child Console的支持如下:

BufferArea(缓冲区)

缓冲区,也就是内存。数据通过缓冲区传递到各个地方,比如:文件中、屏幕上、打印机打印等。

当然上述例子中都是输出缓冲区,输入缓冲区所做的就是对数据的一个暂存。以方便我们来读取而已。
这里的读取也就是事件处理(键盘事件、鼠标事件等),根据事件类型来实现不同的效果。
像在屏幕上输入文字、写入到文件、作为控制信号(比如按ESC退出程序等)等。

InputBufferArea(输入缓冲区)

在Console中输入缓冲区就只有一个,所以针对输入缓冲区的操作而言就很简单,主要包括以下几个函数:

  • FlushConsoleInputBuffer 刷新控制台输入缓冲区。
  • GetNumberOfConsoleInputEvents 获取控制台输入缓冲区中未读的输入记录数。
  • PeekConsoleInput 从指定的控制台输入缓冲区读取数据,而无需将其从缓冲区中删除。
  • ReadConsole 从控制台输入缓冲区读取字符输入,并将其从缓冲区中删除。
  • ReadConsoleInput 从控制台输入缓冲区读取数据,并将其从缓冲区中删除。
  • WriteConsoleInput 将数据直接写入控制台输入缓冲区。
  • ReadConsoleInputEx 从控制台输入缓冲区读取数据,并将其从缓冲区中删除,并具有可配置的行为。
  • SetConsoleCtrlHandler 从调用进程的处理程序函数列表中添加或删除应用程序定义的 HandlerRoutine 。
  • HandlerRoutine 与 SetConsoleCtrlHandler 函数一起使用的应用程序定义函数。
  • GetConsoleMode 获取主机输入缓冲区的当前输入模式或控制台屏幕缓冲区的当前输出模式。
  • SetConsoleMode 设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。

OutputBufferArea(输出缓冲区)

输出缓冲区,我把它成为Console的场景,因为我们可以手动的创建多个输出缓冲区,并给终端更换当前显示的缓冲区,达到一个游戏进入下一关切换场景的效果。输出缓冲区主要包括以下几个函数:


Windows Console API
https://blog.cikaros.top/doc/66ed7485.html
作者
Cikaros
发布于
2022年8月21日
许可协议