CreateConsoleScreenBuffer 函数

重要

本文档介绍控制台平台功能,该功能已不再是生态系统蓝图的一部分。 我们不建议在新产品中使用此内容,但我们未来将无限期支持现有使用。 我们的首选最新解决方案侧重于虚拟终端序列,以实现跨平台方案中的最大兼容性。 可以在经典控制台与虚拟终端文档中找到有关此设计决策的详细信息。

创建控制台屏幕缓冲区。

语法

HANDLE WINAPI CreateConsoleScreenBuffer(
  _In_             DWORD               dwDesiredAccess,
  _In_             DWORD               dwShareMode,
  _In_opt_   const SECURITY_ATTRIBUTES *lpSecurityAttributes,
  _In_             DWORD               dwFlags,
  _Reserved_       LPVOID              lpScreenBufferData
);

参数

dwDesiredAccess [in]
对控制台屏幕缓冲区的访问。 有关访问权限的列表,请参阅控制台缓冲区安全和访问权限

dwShareMode [in]
此参数可以为零,表示无法共享缓冲区,也可以是以下一个或多个值。

含义
FILE_SHARE_READ 0x00000001 可以在控制台屏幕缓冲区上执行其他打开操作,以便进行读取访问。
FILE_SHARE_WRITE 0x00000002 可以在控制台屏幕缓冲区上执行其他打开操作,以便进行写入访问。

lpSecurityAttributes [in, optional]
指向 SECURITY_ATTRIBUTES 结构的指针,该结构确定是否可由子进程继承返回的句柄。 如果 lpSecurityAttributesNULL,则无法继承句柄。 结构的 lpSecurityDescriptor 成员为新的控制台屏幕缓冲区指定安全描述符。 如果 lpSecurityAttributesNULL,则控制台屏幕缓冲区将获取默认的安全描述符。 控制台屏幕缓冲区的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

dwFlags [in]
要创建的控制台屏幕缓冲区的类型。 唯一支持的屏幕缓冲区类型是 CONSOLE_TEXTMODE_BUFFER

lpScreenBufferData
保留;应为 NULL

返回值

如果函数成功,则返回值是新控制台屏幕缓冲区的句柄。

如果函数失败,则返回值为 INVALID_HANDLE_VALUE。 要获得更多的错误信息,请调用 GetLastError

备注

一个控制台可以有多个屏幕缓冲区,但只能有一个活动屏幕缓冲区。 可以访问非活动屏幕缓冲区进行读取和写入,但仅显示活动屏幕缓冲区。 若要使新屏幕缓冲区成为活动屏幕缓冲区,请使用 SetConsoleActiveScreenBuffer 函数。

在调用此函数时,新创建的屏幕缓冲区将从活动屏幕缓冲区复制一些属性。 行为如下所示:

  • Font - 从活动屏幕缓冲区复制
  • Display Window Size - 从活动屏幕缓冲区复制
  • Buffer Size - 匹配 Display Window Size复制)
  • Default Attributes(颜色)- 从活动屏幕缓冲区复制
  • Default Popup Attributes(颜色)- 从活动屏幕缓冲区复制

调用进程可以在需要控制台屏幕缓冲区句柄的任何函数中使用返回的句柄,但受 dwDesiredAccess 参数指定的访问限制的约束。

调用进程可以使用 DuplicateHandle 函数创建一个重复的屏幕缓冲区句柄,该句柄具有与原始句柄不同的访问权限或可继承性。 但是,不能使用 DuplicateHandle 创建对不同进程有效的重复项(除非通过继承创建重复项)。

若要关闭控制台屏幕缓冲区句柄,请使用 CloseHandle 函数。

提示

不建议使用此 API,但它在备用屏幕缓冲区序列中具有等效的近似虚拟终端。 设置备用屏幕缓冲区可以为应用程序提供单独的隔离空间,用于在其会话运行时过程中进行绘制,同时保留应用程序调用方显示的内容。 这会维护用于在进程退出时进行简单还原的绘图信息。

示例

有关示例,请参阅读取和写入字符和属性块

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 ConsoleApi2.h (via WinCon.h, include Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

控制台函数

控制台屏幕缓冲区

CloseHandle

DuplicateHandle

GetConsoleScreenBufferInfo

SECURITY_ATTRIBUTES

SetConsoleActiveScreenBuffer

SetConsoleScreenBufferSize