SetConsoleMode 函数

设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。

语法

BOOL WINAPI SetConsoleMode(
  _In_ HANDLE hConsoleHandle,
  _In_ DWORD  dwMode
);

参数

hConsoleHandle [进]
控制台输入缓冲区或控制台屏幕缓冲区的句柄。 该句柄必须具有 GENERIC_READ 访问权限。 有关详细信息,请参阅控制台缓冲区安全性和访问权限

dwMode [进]
要设置的输入或输出模式。

如果 hConsoleHandle 参数是输入句柄,则模式可以是下列的一个或多个值。 创建控制台后,默认将启用所有输入模式(ENABLE_WINDOW_INPUT 和 ENABLE_VIRTUAL_TERMINAL_INPUT 除外)。

含义
ENABLE_ECHO_INPUT 0x0004 ReadFileReadConsole 函数读取的字符在键入到控制台时,将被写入到活动屏幕缓冲区。 只有同时启用了 ENABLE_LINE_INPUT 模式时,才能使用此模式
ENABLE_INSERT_MODE 0x0020 如果启用,在控制台窗口中输入的文本将插入到当前光标位置,并且不会覆盖该位置后面的所有文本。 如果禁用,则将覆盖后面的所有文本。
ENABLE_LINE_INPUT 0x0002 仅当读取回车符时,才返回 ReadFileReadConsole 函数。 如果禁用此模式,则将在有一个或多个字符可用时返回函数。
ENABLE_MOUSE_INPUT 0x0010 如果鼠标指针位于控制台窗口的边框内并且窗口具有键盘焦点,则通过移动鼠标和按下按钮生成的鼠标事件会放置在输入缓冲区中。 即使启用此模式,ReadFileReadConsole 也会丢弃这些事件ReadConsoleInput 函数可用于从输入缓冲区读取 MOUSE_EVENT 输入记录
ENABLE_PROCESSED_INPUT 0x0001 Ctrl+C 由系统处理,且不会放入输入缓冲区中。 如果 ReadFileReadConsole 正在读取输入缓冲区,则其他控制键将由系统处理,且不会返回到 ReadFile 或 ReadConsole 缓冲区中。 如果还启用了 ENABLE_LINE_INPUT 模式,则 Backspace、回车符和换行符将由系统处理
ENABLE_QUICK_EDIT_MODE 0x0040 用户可通过此标志使用鼠标选择和编辑文本。 要启用此模式,请使用 ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS。 要禁用此模式,请使用不带此标志的 ENABLE_EXTENDED_FLAGS
ENABLE_WINDOW_INPUT 0x0008 更改控制台屏幕缓冲区大小的用户交互将记录到控制台的输入缓冲区中。 使用 ReadConsoleInput 函数的应用程序可从输入缓冲区中读取有关这些事件的信息,但使用 ReadFileReadConsole 的应用程序无法读取这些事件
ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 如果设置此标志,则会指导虚拟终端处理引擎将控制台窗口收到的用户输入转换为可由支持的应用程序通过 ReadFileReadConsole 函数检索的控制台虚拟终端序列

此标志通常与输出句柄上的 ENABLE_VIRTUAL_TERMINAL_PROCESSING 一起使用,以连接到只通过虚拟终端序列进行通信的应用程序。

如果 hConsoleHandle 参数是屏幕缓冲区句柄,则模式可以是下列的一个或多个值。 创建屏幕缓冲区后,默认情况下将启用这两种输出模式。

含义
ENABLE_PROCESSED_OUTPUT 0x0001 针对 ASCII 控制序列对由 WriteFileWriteConsole 函数写入的字符,或者由 ReadFileReadConsole 函数回显的字符进行分析,并执行正确的操作。 处理 Backspace、Tab、报警符、回车符和换行符。 应在使用控制序列或设置 ENABLE_VIRTUAL_TERMINAL_PROCESSING 时启用它
ENABLE_WRAP_AT_EOL_OUTPUT 0x0002 使用 WriteFileWriteConsole 写入时,或者使用 ReadFileReadConsole 回显时,当光标到达当前行的末尾时,它将移到下一行的开头。 这会导致控制台窗口中显示的行在光标前进到窗口的最后一行时自动向上滚动。 还会导致控制台屏幕缓冲区的内容在光标前进到控制台屏幕缓冲区的最后一行时向上滚动(../丢弃控制台屏幕缓冲区的顶行)。 如果禁用此模式,则将覆盖该行中的最后一个字符以及后面的任何字符。
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 使用 WriteFileWriteConsole 写入时,将为 VT100 和类似控制字符序列分析字符,这些字符序列可控制光标移动、颜色/字体模式以及其他也可通过现有控制台 API 执行的操作。 有关详细信息,请参阅控制台虚拟终端序列
确保在使用此标志时设置 ENABLE_PROCESSED_OUTPUT
DISABLE_NEWLINE_AUTO_RETURN 0x0008 使用 WriteFileWriteConsole 写入时,这会将附加状态添加到行尾换行,从而可能导致延迟光标移动和缓冲区滚动操作

正常情况下,当设置 ENABLE_WRAP_AT_EOL_OUTPUT 并且文本到达行尾时,光标将立即移动到下一行,缓冲区的内容将向上滚动一行。 与此标志设置相反,光标不会移动到下一行,也不会执行滚动操作。 写入的字符将在该行的最后位置输出,并且光标将保持在该字符的上方,就好像 ENABLE_WRAP_AT_EOL_OUTPUT 已禁用一样,但将输出下一个可输出字符,就像 ENABLE_WRAP_AT_EOL_OUTPUT 已启用一样。 不会覆盖字符。 具体而言,光标会快速向下移动到下一行,必要时执行滚动,输出字符,然后光标向前移动一个位置。

此标志通常与 ENABLE_VIRTUAL_TERMINAL_PROCESSING 设置结合使用,以便更好地模拟终端模拟器,即在屏幕上(右下角位置)写入最后一个字符,但不触发立即滚动操作
ENABLE_LVB_GRID_WORLDWIDE 0x0010 用于写入字符属性(包括 WriteConsoleOutputWriteConsoleOutputAttribute)的 API 允许使用来自字符属性的标志调整文本的前景色和背景色。 此外,使用 COMMON_LVB 前缀指定了 DBCS 标志范围。 过去,这些标志仅在中文、日语和韩语的 DBCS 代码页中起作用。

除前导字节和尾随字节标志以外,其余描述线条绘制和反向显示(../前景色和背景色转换)的标志对于其他语言很有用,可用于强调输出的各个部分。

如果设置此控制台模式标志,则将允许在每种语言的每个代码页中使用这些属性。

默认情况下,此标志处于禁用状态,以保持与过去利用控制台的已知应用程序的兼容性,控制台会忽略非 CJK 计算机上的这些标志,以存储这些位字段,供自己使用或发生意外时使用。

请注意,使用 ENABLE_VIRTUAL_TERMINAL_PROCESSING 模式可能会导致设置 LVB 的网格和反向显示标志,而如果附加应用程序通过控制台虚拟终端序列请求下划线或反向显示,则此标志仍会处于禁用状态

返回值

如果该函数成功,则返回值为非零值。

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

备注

控制台由一个输入缓冲区和一个或多个屏幕缓冲区组成。 控制台缓冲区的模式确定控制台在输入或输出 (I/O) 操作期间的行为方式。 一组标志常量用于输入句柄,另一组用于屏幕缓冲区(输出)句柄。 设置一个屏幕缓冲区的输出模式不会影响其他屏幕缓冲区的输出模式。

ENABLE_LINE_INPUT 和 ENABLE_ECHO_INPUT 模式只影响使用 ReadFileReadConsole 从控制台输入缓冲区进行读取的进程。 同样,ENABLE_PROCESSED_INPUT 模式主要对 ReadFile 和 ReadConsole 用户有影响,只是它还可以确定 Ctrl+C 输入是否记录到输入缓冲区(由 ReadConsoleInput 函数读取),或者是否会传递到由该应用程序定义的函数

ENABLE_WINDOW_INPUT 和 ENABLE_MOUSE_INPUT 模式确定涉及窗口大小调整的用户交互和鼠标操作是记录到输入缓冲区还是被丢弃。 这些事件可通过 ReadConsoleInput 进行读取,但始终按 ReadFileReadConsole 进行筛选

ENABLE_PROCESSED_OUTPUT 和 ENABLE_WRAP_AT_EOL_OUTPUT 模式只会影响使用 ReadFileReadConsole 以及 WriteFileWriteConsole 的进程

若要确定控制台输入缓冲区或屏幕缓冲区的当前模式,请使用 GetConsoleMode 函数

示例

有关示例,请参阅读取输入缓冲区事件

要求

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

另请参阅

控制台函数

控制台模式

GetConsoleMode

HandlerRoutine

ReadConsole

ReadConsoleInput

ReadFile

WriteConsole

WriteFile