ReadConsole是用于从控制台缓冲区中读取输入字符,同时并将这些数据移出该缓冲区。
函数原型
BOOL WINAPI ReadConsole(__in HANDLE hConsoleInput,__out LPVOID lpBuffer,__in DWORD nNumberOfCharsToRead,__out LPDWORD lpNumberOfCharsRead,__in_opt LPVOID pInputControl);
参数
hConsoleInput
控制台屏幕缓冲区的句柄。该句柄必须具有的GENERIC_READ的访问权限。
lpBuffer
如果缓冲区是从进程的64kb堆里分配.缓冲区的最大大小将取决于堆的使用。
nNumberOfCharsToRead
要读取的字符数。
lpNumberOfCharsRead
pInputControl
指向 CONSOLE_ READCONSOLE_CONIROL 结构以指定读取操作结束的单个控制符.此参数可以为空.
返回值
如果函数成功,则返回值为非零值。
如果该函数失败,则返回值为零。要获取错误信息,请调用GetLastError .
其他信息
ReadConsole函数用于从控制台输入缓冲区中读取键盘输入。它的使用与ReadFile函数十分相似,只是它既能读取Unicode(
宽字符),又能读取ANSI模式的字符。为了获得一个应用程序来维护单独的一套输入源,在上述的两种模式中,应该宁愿选择使用ReadConsole函数而不采取ReadFIle函数,尽管ReadConsole函数只能用作控制台输入缓冲区句柄。ReadFile函数则能用于其他的句柄(例如文件或者管线),如果使用一个被重新定向为其他的句柄而不是控制台的标准句柄,ReadConsol函数将执行失败。
所有能影响ReadFile函数执行的输入模式无一例外地都将同样影响ReadConsole函数和SetConsoleMode函数。
如果输入缓冲区中包含了除键盘输入事件意外的其他输入事件(例如鼠标事件或者窗口大小重置事件),则这些事件将会被丢弃。这些事件只能被ReadConsoleInput函数所读取。
在Windows NT中,该函数使用了从控制台当前
代码页中得到的Unicode或者8位码,控制台当前代码页缺省初始化为系统的OEM代码页。如果想要改变控制台
代码页,可以调用SetConsoleCP函数和
SetConsoleOutputCP函数,或者也可以使用chcp(修改或显示控制台当前代码页)或con cp select=commands模式。
速查
Windows NT:3.1以及以上版本;Windows:95及以上版本;Windows CE:不支持
头文件:wincon.h;库文件:kernel32.dll
Unicode:在Windows NT 中通过Unicode或者ANSI版本实现