已经写了这个应用程序,它从控制台读取输入。
for(; ;)
{
GetNumberOfConsoleInputEvents(stdinInput, &numEvents);
if (numEvents != 0) {
INPUT_RECORD eventBuffer;
ReadConsoleInput(stdinInput, &eventBuffer, 1, &numEventsRead);
if (eventBuffer.EventType == KEY_EVENT) {
if(eventBuffer.Event.KeyEvent.bKeyDown)
{
printf("%c",eventBuffer.Event.KeyEvent.uChar.AsciiChar);
dataBuffer[bufferLen++] = eventBuffer.Event.KeyEvent.uChar.AsciiChar;
dataBuffer[bufferLen] = '\0';
if (dataBuffer[bufferLen] == 99 || eventBuffer.Event.KeyEvent.uChar.AsciiChar == '\r') {
printf("User Wrote: %s\n",dataBuffer);
memset(dataBuffer,0,sizeof(dataBuffer));
bufferLen = 0;
}
}
}
}
}
它将数据放到缓冲区,然后打印出缓冲区。当我使用Shift
或CapsLock
写入大写字母或! @ # $ %
字符时,会发生此问题。然后打印出任何东西。
我试了一下VK_LSHIFT
代码,但没有奏效。
此外,如果尝试用英文以外的其他语言写东西,则会打印出类似▒├╞▒├╞▒├│▒├│
它无法识别其他语言。
有人可以给我一个关于如何解决这些问题的提示吗?
谢谢!
非常感谢。除了'ReadConsoleInputW'需要'ReadConsoleInputA'之外,这个工作。再次感谢! – 2012-01-15 09:41:26
@ F.N ReadConsoleInputW的作品,但你需要改变一切使用Unicode:改变'dataBuffer'包含'wchar_t',将'printf'改为'wprintf'等。 – arx 2012-01-15 14:30:54