Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadKey()

static ConsoleKeyInfo System.ConsolePal.ReadKey ( bool intercept)
inlinestatic

Definition at line 605 of file ConsolePal.cs.

606 {
607 int numEventsRead = -1;
608 global::Interop.InputRecord buffer;
610 {
611 if (_cachedInputRecord.eventType == 1)
612 {
614 if (_cachedInputRecord.keyEvent.repeatCount == 0)
615 {
616 _cachedInputRecord.eventType = -1;
617 }
618 else
619 {
620 _cachedInputRecord.keyEvent.repeatCount--;
621 }
622 }
623 else
624 {
625 while (true)
626 {
627 if (!global::Interop.Kernel32.ReadConsoleInput(InputHandle, out buffer, 1, out numEventsRead) || numEventsRead == 0)
628 {
630 }
631 short virtualKeyCode = buffer.keyEvent.virtualKeyCode;
632 if ((!IsKeyDownEvent(buffer) && virtualKeyCode != 18) || (buffer.keyEvent.uChar == '\0' && IsModKey(buffer)))
633 {
634 continue;
635 }
636 ConsoleKey consoleKey = (ConsoleKey)virtualKeyCode;
637 if (!IsAltKeyDown(buffer))
638 {
639 break;
640 }
641 if (consoleKey < ConsoleKey.NumPad0 || consoleKey > ConsoleKey.NumPad9)
642 {
643 switch (consoleKey)
644 {
645 case ConsoleKey.Clear:
646 case ConsoleKey.PageUp:
647 case ConsoleKey.PageDown:
648 case ConsoleKey.End:
649 case ConsoleKey.Home:
650 case ConsoleKey.LeftArrow:
651 case ConsoleKey.UpArrow:
652 case ConsoleKey.RightArrow:
653 case ConsoleKey.DownArrow:
654 case ConsoleKey.Insert:
655 continue;
656 }
657 break;
658 }
659 }
660 if (buffer.keyEvent.repeatCount > 1)
661 {
662 buffer.keyEvent.repeatCount--;
664 }
665 }
666 }
667 ControlKeyState controlKeyState = (ControlKeyState)buffer.keyEvent.controlKeyState;
668 bool shift = (controlKeyState & ControlKeyState.ShiftPressed) != 0;
669 bool alt = (controlKeyState & (ControlKeyState.RightAltPressed | ControlKeyState.LeftAltPressed)) != 0;
670 bool control = (controlKeyState & (ControlKeyState.RightCtrlPressed | ControlKeyState.LeftCtrlPressed)) != 0;
671 ConsoleKeyInfo result = new ConsoleKeyInfo(buffer.keyEvent.uChar, (ConsoleKey)buffer.keyEvent.virtualKeyCode, shift, alt, control);
672 if (!intercept)
673 {
674 Console.Write(buffer.keyEvent.uChar);
675 }
676 return result;
677 }
static bool IsModKey(global::Interop.InputRecord ir)
static IntPtr InputHandle
static bool IsAltKeyDown(global::Interop.InputRecord ir)
static readonly object s_readKeySyncObject
static bool IsKeyDownEvent(global::Interop.InputRecord ir)
static global::Interop.InputRecord _cachedInputRecord
static string InvalidOperation_ConsoleReadKeyOnFile
Definition SR.cs:60
Definition SR.cs:7

References System.ConsolePal._cachedInputRecord, System.buffer, System.ConsolePal.InputHandle, System.SR.InvalidOperation_ConsoleReadKeyOnFile, System.ConsolePal.IsAltKeyDown(), System.ConsolePal.IsKeyDownEvent(), System.ConsolePal.IsModKey(), System.ConsolePal.s_readKeySyncObject, and System.Console.Write().

Referenced by System.Console.ReadKey(), and System.Console.ReadKey().