ReadConsole功能从控制台输入缓冲区读取字符输入,并将其从缓冲区中删除。
BOOL ReadConsole(
HANDLE 【hConsoleInput】, | //控制台输入缓冲区的句柄 |
LPVOID 【lpBuffer】, | //缓冲区地址接收数据 |
DWORD 【nNumberOfCharsToRead】, | //要读取的字符数 |
LPDWORD 【lpNumberOfCharsRead】, | //读取的字符数的地址 |
LPVOID 【lpReserved】 | //保留 |
); |
参数
【hConsoleInput】
标识控制台输入缓冲区。句柄必须具有GENERIC_READ权限。
【lpBuffer】
指向缓冲区,接收从控制台输入缓冲区读取的数据。
【nNumberOfCharsToRead】
指定要读取的字符数。因为该函数可以读取2字节Unicode或1字节ANSI字符,所以【lpBuffer】参数指向的缓冲区的大小应至少为【nNumberOfCharsToRead】 * sizeof(TCHAR)。
【lpNumberOfCharsRead】
指向接收实际读取的字符数的32位变量。
【lpReserved】
Reserved; must be NULL.
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
ReadConsole从控制台的输入缓冲区读取键盘输入。它的行为类似于ReadFile函数,除了它可以使用Unicode(宽字符)或ANSI模式读取。要使应用程序能够维护与两种模式兼容的一组源,请使用ReadConsole而不是ReadFile.虽然ReadConsole只能与控制台输入缓冲区句柄一起使用,但可以与其他句柄(如文件或管道)一起使用ReadFile.如果与被重定向为控制台句柄以外的标准句柄一起使用,ReadConsole将失败。
影响ReadFile行为的所有输入模式对ReadConsole具有相同的效果。要检索并设置控制台输入缓冲区的输入模式,请使用GetConsoleMode和SetConsoleMode功能。
如果输入缓冲区包含除键盘事件之外的输入事件(如鼠标事件或窗口调整大小事件),则它们将被丢弃。这些事件只能通过使用ReadConsoleInput函数来读取。
Windows NT:此函数使用控制台当前代码页中的Unicode字符或8位字符。控制台的代码页最初默认为系统的OEM代码页。要更改控制台的代码页,请使用SetConsoleCP或SetConsoleOutputCP功能,或使用CHCPsk或mode con cp select=命令。
也可以看看
GetConsoleMode, ReadConsoleInput, ReadFile, SetConsoleCP, SetConsoleMode, SetConsoleOutputCP, WriteConsole