extern int32 ConsoleKeyhit (VOID);
int32 ConsoleKeyhit (VOID)
{
HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE);
INPUT_RECORD irInputRecord;
DWORD dwEventsRead;
INT32 cChar;
while(ReadConsoleInputA (hStdin, &irInputRecord, 1, &dwEventsRead)) /* Read key press */
if (irInputRecord.EventType == KEY_EVENT
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_SHIFT
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_MENU
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_CONTROL)
{
cChar = irInputRecord.Event.KeyEvent.uChar.AsciiChar;
if (cChar == 0) cChar = 256 * irInputRecord.Event.KeyEvent.wVirtualScanCode; //translate to an extended ASCII value, to match _KEYHIT codes.
//NOTE: SHIFT and other modifier keys are still giving incorrect codes. They need a little tweaking to work nicely.
if (cChar>90) ReadConsoleInputA (hStdin, &irInputRecord , 1, &dwEventsRead); /* Read key release */
if (cChar<65) ReadConsoleInputA (hStdin, &irInputRecord , 1, &dwEventsRead); /* Read key release */
return cChar;
}
return EOF;
}