ReadFile 和 WriteFile 函数或 ReadConsole 和 WriteConsole 函数使应用程序能够将控制台输入和写入控制台输出作为字符流进行读取。 ReadConsole 和 WriteConsole 的行为与 ReadFile 和 WriteFile 完全相同,只是它们可以用作宽字符函数(其中文本参数必须使用 Unicode)或 ANSI 函数(其中文本参数必须使用 Windows 字符集中的字符)。 需要维护单个源集以支持 Unicode 或 ANSI 字符集的应用程序应使用 ReadConsole 和 WriteConsole。
ReadConsole 和 WriteConsole 只能与控制台句柄一起使用; ReadFile 和 WriteFile 可用于其他句柄(如文件或管道)。 如果与已重定向且不再是控制台句柄的标准句柄一起使用,ReadConsole 和 WriteConsole 将失败。
若要获取键盘输入,进程可以将 ReadFile 或 ReadConsole 与控制台的输入缓冲区的句柄一起使用,也可以使用 ReadFile 从文件或管道读取输入(如果 STDIN
已重定向)。 这些函数仅返回可转换为 ANSI 或 Unicode 字符的键盘事件。 可返回的输入包括控制键组合。 这些函数不返回涉及函数键或箭头键的键盘事件。 将丢弃鼠标、窗口、焦点或菜单输入生成的输入事件。
如果启用行输入模式(默认模式),则在按下 ENTER 键之前, ReadFile 和 ReadConsole 不会返回到调用应用程序。 如果禁用行输入模式,则函数在至少一个字符可用之前不会返回。 在任一模式下,所有可用字符都会读取,直到没有更多键可用或已读取指定的字符数。 将缓冲未读字符,直到下一次读取作。 这些函数报告实际读取的字符总数。 如果启用了回显输入模式,这些函数读取的字符将写入当前光标位置的活动屏幕缓冲区。
进程可以使用 WriteFile 或 WriteConsole 写入活动或非活动屏幕缓冲区,或者如果 STDOUT 已重定向,则可以使用 WriteFile 写入文件或管道。 处理的输出模式并在 EOL 输出模式处换行,以控制字符写入或回显到屏幕缓冲区的方式。
由 WriteFile 或 WriteConsole 编写的字符(或 ReadFile 或 ReadConsole 的回显)将插入到当前光标位置的屏幕缓冲区中。 写入每个字符时,光标位置将前进到下一个字符单元格;但是,行末尾的行为取决于控制台屏幕缓冲区在 EOL 输出模式下的包装。
可以通过 虚拟终端序列找到有关游标位置的进一步详细信息,特别是在 查询状态 类别中,用于查找当前位置和用于设置当前位置的 游标定位 类别。 或者,应用程序可以使用 GetConsoleScreenBufferInfo 函数来确定当前游标位置和 SetConsoleCursorPosition 函数来设置游标位置。 但是,对于所有新的和正在进行的开发, 首选虚拟终端序列 机制。 有关此决策背后的策略的更多详细信息,请参阅 经典函数与虚拟终端 和 生态系统路线图 文档。
有关使用高级控制台 I/O 函数的示例,请参阅 使用 High-Level 输入和输出函数。