ReadConsoleOutput 函数
重要
本文档介绍控制台平台功能,该功能已不再是生态系统蓝图的一部分。 我们不建议在新产品中使用此内容,但我们未来将无限期支持现有使用。 我们的首选最新解决方案侧重于虚拟终端序列,以实现跨平台方案中的最大兼容性。 可以在经典控制台与虚拟终端文档中找到有关此设计决策的详细信息。
从控制台屏幕缓冲区中字符单元的矩形块读取字符和颜色特性数据,并且该函数将数据写入至目标缓冲区中指定位置上的矩形块中。
语法
BOOL WINAPI ReadConsoleOutput(
_In_ HANDLE hConsoleOutput,
_Out_ PCHAR_INFO lpBuffer,
_In_ COORD dwBufferSize,
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpReadRegion
);
参数
hConsoleOutput [in]
控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。 有关详细信息,请参阅控制台缓冲区安全性和访问权限。
lpBuffer [out]
指针 – 指向接收从控制台屏幕缓冲区读取的数据的目标缓冲区。 此指针被视为 CHAR_INFO 结构二维数组的原点,其大小由 dwBufferSize 参数指定。
dwBufferSize [in]
lpBuffer 参数的大小(以字符单元格表示)。 COORD 结构的 X 成员是列数;Y 成员是行数。
dwBufferCoord [in]
lpBuffer 参数中左上角单元格的坐标,用于接收从控制台屏幕缓冲区读取的数据。 COORD 结构的 X 成员是列;Y 成员是行。
lpReadRegion [in, out]
指针 – 指向 SMALL_RECT 结构。 输入时,结构成员指定要从中读取函数的控制台屏幕缓冲区矩形的左上角和右下角坐标。 输出时,结构成员指定使用的实际矩形。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
ReadConsoleOutput 将控制台屏幕缓冲区和目标缓冲区视为二维数组(字符单元的列和行)。 lpReadRegion 参数指向的矩形指定要从控制台屏幕缓冲区读取的块的大小和位置。 具有相同大小的目标矩形的左上角单元格位于 lpBuffer 数组中 dwBufferCoord 参数的坐标处。 从控制台屏幕缓冲区源矩形中的单元格读取的数据,将复制到目标缓冲区中的相应单元格。 如果相应单元格位于目标缓冲区矩形的边界之外(其尺寸由 dwBufferSize 参数指定),则不会复制数据。
目标缓冲区中与不在控制台屏幕缓冲区边界内的坐标相对应的单元格保持不变。 换句话说,这些单元格没有可供读取的屏幕缓冲区数据。
在 ReadConsoleOutput 返回值之前,它将 lpReadRegion 参数指向的结构的成员设置为实际屏幕缓冲区矩形,其单元格被复制到目标缓冲区中。 此矩形反映源矩形中在目标缓冲区中存在相应单元格的单元格,因为 ReadConsoleOutput 剪辑源矩形的尺寸以适应控制台屏幕缓冲区的边界。
如果 lpReadRegion 指定的矩形完全位于控制台屏幕缓冲区的边界之外,或者如果相应的矩形完全放置在目标缓冲区的边界之外,则不会复制任何数据。 在这种情况下,该函数返回由 lpReadRegion 参数集指向的结构的成员,以便 Right 成员小于 Left,或 Bottom 成员小于 Top。 若要确定控制台屏幕缓冲区的大小,请使用 GetConsoleScreenBufferInfo 函数。
ReadConsoleOutput 函数对控制台屏幕缓冲区的游标位置无影响。 此函数不会更改控制台屏幕缓冲区的内容。
此函数使用控制台当前代码页中的 Unicode 字符或 8 位字符。 控制台的代码页最初默认为系统的 OEM 代码页。 若要更改控制台的代码页,请使用 SetConsoleCP 或 SetConsoleOutputCP 函数。 旧版使用者也可以使用 chcp 或 mode con cp select= 命令,但不建议将其用于新开发。
提示
不建议使用此 API,并且此 API 没有等效的虚拟终端。 此决定有意将 Windows 平台与其他操作系统保持一致,其中单个客户端应用程序应记住其自身的绘制状态以供进一步操作。 如果使用此 API,则通过跨平台实用工具和传输(例如 SSH)进行远程处理的应用程序可能无法正常工作。
示例
有关示例,请参阅读取和写入字符和属性块。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
Header | ConsoleApi2.h (via WinCon.h, include Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |
Unicode 和 ANSI 名称 | ReadConsoleOutputW (Unicode) 和 ReadConsoleOutputA (ANSI) |