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