Windows Console API
控制台由一个输入缓冲区和一个或多个屏幕缓冲区组成。 输入缓冲区包含输入记录的队列,其中每个队列都包含有关输入事件的信息。
输入队列始终包含按键和键释放事件。 它还可能包含鼠标事件 (指针移动、按钮按下和释放) 和事件,用户操作在此期间影响活动屏幕缓冲区的大小。
屏幕缓冲区是一个在控制台窗口中输出的二维字符和颜色数据数组。 任意数量的进程都可以共享控制台。
对Console的理解
官方一般都是长篇大论,这里记录一下我对Console的理解:
Console主要包括两个部分:
- InputBufferArea
- OutputBufferArea
所以对Console而言,其内部就是多个封装好的内存空间需求按照一定的规则使用而已。针对Console的函数主要包括以下几个:
- GetConsoleWindow 获取与调用进程关联的控制台使用的窗口句柄。
- GetStdHandle 获取标准输入、标准输出或标准错误设备的句柄。
- SetStdHandle 设置标准输入、标准输出或标准错误设备的句柄。
- AllocConsole 申请新的终端
- GetConsoleCP 获取控制台使用的输入代码页。
- SetConsoleCP 设置与调用进程关联的控制台使用的输入代码页。
- GetConsoleDisplayMode 获取当前控制台的显示模式
- GetConsoleOriginalTitle 获取当前控制台窗口的原始标题。
- GetConsoleTitle 获取当前控制台窗口的标题。
- SetConsoleTitle 设置当前控制台窗口的标题。
- GetConsoleOutputCP 获取与调用进程关联的控制台使用的输出代码页。
- SetConsoleOutputCP 设置与调用进程关联的控制台使用的输出代码页。
- GetConsoleSelectionInfo 获取有关当前控制台选择的信息。
- GetCurrentConsoleFont 获取有关当前控制台字体的信息。
- GetCurrentConsoleFontEx 获取有关当前控制台字体的扩展信息。
- SetCurrentConsoleFontEx 设置有关当前控制台字体的扩展信息。
- GetNumberOfConsoleMouseButtons 获取当前控制台使用的鼠标上的按钮数。
- SetConsoleActiveScreenBuffer 将指定的屏幕缓冲区设置为当前显示的控制台屏幕缓冲区。
对Child Console的支持如下:
- CreatePseudoConsole 创建一个子终端
- ClosePseudoConsole 关闭子终端
- ResizePseudoConsole 将伪容器的内部缓冲区大小调整为给定大小。
BufferArea(缓冲区)
缓冲区,也就是内存。数据通过缓冲区传递到各个地方,比如:文件中、屏幕上、打印机打印等。
当然上述例子中都是输出缓冲区,输入缓冲区所做的就是对数据的一个暂存。以方便我们来读取而已。
这里的读取也就是事件处理(键盘事件、鼠标事件等),根据事件类型来实现不同的效果。
像在屏幕上输入文字、写入到文件、作为控制信号(比如按ESC
退出程序等)等。
InputBufferArea(输入缓冲区)
在Console中输入缓冲区就只有一个,所以针对输入缓冲区的操作而言就很简单,主要包括以下几个函数:
- FlushConsoleInputBuffer 刷新控制台输入缓冲区。
- GetNumberOfConsoleInputEvents 获取控制台输入缓冲区中未读的输入记录数。
- PeekConsoleInput 从指定的控制台输入缓冲区读取数据,而无需将其从缓冲区中删除。
- ReadConsole 从控制台输入缓冲区读取字符输入,并将其从缓冲区中删除。
- ReadConsoleInput 从控制台输入缓冲区读取数据,并将其从缓冲区中删除。
- WriteConsoleInput 将数据直接写入控制台输入缓冲区。
- ReadConsoleInputEx 从控制台输入缓冲区读取数据,并将其从缓冲区中删除,并具有可配置的行为。
- SetConsoleCtrlHandler 从调用进程的处理程序函数列表中添加或删除应用程序定义的 HandlerRoutine 。
- HandlerRoutine 与 SetConsoleCtrlHandler 函数一起使用的应用程序定义函数。
- GetConsoleMode 获取主机输入缓冲区的当前输入模式或控制台屏幕缓冲区的当前输出模式。
- SetConsoleMode 设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。
OutputBufferArea(输出缓冲区)
输出缓冲区,我把它成为Console的场景,因为我们可以手动的创建多个输出缓冲区,并给终端更换当前显示的缓冲区,达到一个游戏进入下一关切换场景的效果。输出缓冲区主要包括以下几个函数:
- CreateConsoleScreenBuffer 创建控制台屏幕缓冲区。
- FillConsoleOutputAttribute 设置指定数量的字符单元格的文本和背景色属性。
- FillConsoleOutputCharacter 将字符按指定数量写入输出缓冲区。
- GetConsoleCursorInfo 获取指定控制台屏幕缓冲区游标的大小和可见性信息
- SetConsoleCursorInfo 设置指定控制台屏幕缓冲区的游标的大小和可见性。
- GetConsoleFontSize 获取指定控制台屏幕缓冲区使用的字体大小
- GetConsoleScreenBufferInfo 获取有关指定控制台屏幕缓冲区的信息。
- GetConsoleScreenBufferInfoEx 获取有关指定控制台屏幕缓冲区的扩展信息。
- SetConsoleScreenBufferInfoEx 设置有关指定控制台屏幕缓冲区的扩展信息。
- GetLargestConsoleWindowSize 获取最大可能控制台窗口的大小。
- ScrollConsoleScreenBuffer 在屏幕缓冲区中移动数据块。
- SetConsoleCursorPosition 设置指定控制台屏幕缓冲区中的光标位置。
- SetConsoleDisplayMode 设置指定控制台屏幕缓冲区的显示模式。
- GetConsoleMode 获取主机输入缓冲区的当前输入模式或控制台屏幕缓冲区的当前输出模式。
- SetConsoleMode 设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。
- SetConsoleScreenBufferSize 更改指定控制台屏幕缓冲区的大小。
- SetConsoleTextAttribute 设置写入控制台屏幕缓冲区的字符的前景 (文本) 和背景色属性。
- SetConsoleWindowInfo 设置控制台屏幕缓冲区窗口的当前大小和位置。
- WriteConsole 从当前光标位置开始,将字符串写入控制台屏幕缓冲区。
- ReadConsoleOutput 从控制台屏幕缓冲区中字符单元格的矩形块读取字符和颜色属性数据。
- WriteConsoleOutput 将字符和颜色属性数据写入控制台屏幕缓冲区中字符单元格的指定矩形块。
- ReadConsoleOutputAttribute 从控制台屏幕缓冲区的连续单元格复制指定的前景和背景色属性。
- WriteConsoleOutputAttribute 将许多前景和背景色属性复制到控制台屏幕缓冲区的连续单元格。
- ReadConsoleOutputCharacter 从控制台屏幕缓冲区的连续单元格复制多个字符。
- WriteConsoleOutputCharacter 将多个字符复制到控制台屏幕缓冲区的连续单元格。
Windows Console API
https://blog.cikaros.top/doc/66ed7485.html