高级控制台输入和输出函数

ReadFileWriteFile 函数,或者 ReadConsoleWriteConsole 函数,使应用程序能够以字符流的形式读取控制台输入并写入控制台输出。 ReadConsoleWriteConsole 的行为与 ReadFileWriteFile 完全相同,只是它们即可以用作宽字符函数(其中文本参数必须使用 Unicode),也可以用作 ANSI 函数(其中文本参数必须使用 Windows 字符集中的字符)。 需要维护单个来源集以支持 Unicode 或 ANSI 字符集的应用程序应使用 ReadConsoleWriteConsole

ReadConsoleWriteConsole 只能与控制台句柄一起使用;ReadFileWriteFile 可与其他句柄(例如文件或管道)一起使用。 如果与已重定向且不再是控制台句柄的标准句柄一起使用,ReadConsoleWriteConsole 会失败。

若要获取键盘输入,进程可以将 ReadFileReadConsole 与控制台的输入缓冲区的句柄一起使用,也可以使用 ReadFile 从文件或管道中读取输入(如果 STDIN 已重定向)。 这些函数只会返回可转换为 ANSI 或 Unicode 字符的键盘事件。 可返回的输入包括控制组合键。 这些函数不会返回涉及功能键或箭头键的键盘事件。 鼠标、窗口、焦点或菜单输入生成的输入事件将被丢弃。

如果启用行输入模式(默认模式),则在按下 ENTER 键之前,ReadFileReadConsole 不会返回到调用应用程序。 如果禁用行输入模式,则在至少有一个字符可用之前,函数不会返回。 在任一模式下,会读取所有可用字符,直到没有更多键可用或已读取指定的字符数。 在下一次读取操作之前,会缓冲未读字符。 这些函数会报告实际读取的字符总数。 如果启用了回显输入模式,这些函数读取的字符将在当前游标位置写入活动屏幕缓冲区。

进程可以使用 WriteFileWriteConsole 写入活动或非活动屏幕缓冲区,或者如果 STDOUT 已重定向,则可以使用 WriteFile 写入文件或管道。 已处理输出模式和在 EOL 处换行输出模式可控制字符写入或回显到屏幕缓冲区的方式。

WriteFileWriteConsole 编写的字符或者由 ReadFileReadConsole 回显的字符将在当前游标位置插入到屏幕缓冲区中。 写入每个字符时,游标位置将前进到下一个字符单元;但是,行末尾的行为取决于控制台屏幕缓冲区的在 EOL 处换行输出模式。

可以通过虚拟终端序列找到有关游标位置的进一步详细信息,特别是在用于查找当前位置的查询状态类别中和用于设置当前位置的游标定位类别中。 或者,应用程序可以使用 GetConsoleScreenBufferInfo 函数来确定当前游标位置,使用 SetConsoleCursorPosition 函数来设置游标位置。 但是,对于所有新的和正在进行的开发,首选虚拟终端序列机制。 有关此决策背后的策略详情,请参阅经典函数与虚拟终端以及生态系统蓝图文档。

有关使用高级控制台 I/O 函数的示例,请参阅使用高级输入和输出函数