ReadFile和WriteFile功能或ReadConsole和WriteConsole功能使应用程序能够读取控制台输入和写入控制台输出作为字符流。ReadConsole和WriteConsole的行为完全符合ReadFile和WriteFile,除了它们可以用作宽字符函数(其中文本参数必须使用Unicode)或ANSI函数(其中文本参数必须使用字符从Windows 3.【x】字符集)。需要维护一组源以支持Unicode或ANSI字符集的应用程序应使用ReadConsole和WriteConsole.
ReadConsole和WriteConsole只能与控制台手柄一起使用; ReadFile和WriteFile可以与其他句柄(如文件或管道)一起使用。如果与已重定向并且不再是控制台句柄的标准句柄一起使用,ReadConsole和WriteConsole将失败。
要获得键盘输入,过程可以使用控制台输入缓冲区的句柄ReadFile或ReadConsole,或者如果STDIN被重定向,则可以使用ReadFile从文件或管道读取输入。这些函数只返回可以转换为ANSI字符的键盘事件(在ReadConsole的情况下为Unicode字符)。可以返回的输入包括控制键组合。这些功能不会返回涉及功能键或箭头键的键盘事件。由鼠标,窗口,焦点或菜单输入生成的输入事件将被丢弃。
如果线路输入模式被启用(默认模式),ReadFile和ReadConsole不会返回到调用应用程序,直到按ENTER键。如果线路输入模式被禁用,则至少有一个字符可用时,功能不会返回。在任一模式下,读取所有可用的字符,直到没有更多的键可用或指定的字符数已被读取。未读字符被缓冲,直到下一次读操作。函数报告实际读取的字符总数。如果启用了回声输入模式,则通过这些功能读取的字符将被写入当前光标位置的活动屏幕缓冲区。
进程可以使用WriteFile或WriteConsole写入活动或非活动屏幕缓冲区,或者如果STDOUT被重定向,则可以使用WriteFile写入文件或管道。处理的输出模式和包装在EOL输出模式控制字符写入或回显到屏幕缓冲区的方式。
由WriteFile或WriteConsole编写或由ReadFile或ReadConsole回显的字符将插入当前光标位置的屏幕缓冲区。当每个字符被写入时,光标位置前进到下一个字符单元;然而,一行结束时的行为取决于屏幕缓冲区在EOL输出模式下的换行。应用程序可以使用GetConsoleScreenBufferInfo函数来确定当前光标位置和SetConsoleCursorPosition功能来设置光标位置。
有关使用高级控制台I / O功能的示例,请参阅使用高级输入和输出功能.