static string KeyStatusString(Windows.UI.Core.CorePhysicalKeyStatus KeyStatus) { //var shiftState = Window.Current.CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift); //var ctrlState = Window.Current.CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control); var shiftState = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Shift).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var ctrlState = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var altState = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Menu).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var platformState = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.LeftWindows).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); platformState |= Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.RightWindows).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var capsState = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.CapitalLock).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); var numLock = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.NumberKeyLock).HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down); return("shft=[" + shiftState + "] ctrl=[" + ctrlState + "] altState=[" + altState + "] pltf=[" + platformState + "] capl=[" + capsState + "] numl=[" + numLock + "] ext:[" + KeyStatus.IsExtendedKey + "] rel:[" + KeyStatus.IsKeyReleased + "] men:[" + KeyStatus.IsMenuKeyDown + "] rep:[" + KeyStatus.RepeatCount + "] cod:[" + KeyStatus.ScanCode + "] wasDown:[" + KeyStatus.WasKeyDown + "]"); }
private static Keys KeyTranslate(Windows.System.VirtualKey inkey, CorePhysicalKeyStatus keyStatus) { switch (inkey) { // WinRT does not distinguish between left/right keys // We have to check for special keys such as control/shift/alt/ etc case Windows.System.VirtualKey.Control: // we can detect right Control by checking the IsExtendedKey value. return (keyStatus.IsExtendedKey) ? Keys.RightControl : Keys.LeftControl; case Windows.System.VirtualKey.Shift: // we can detect right shift by checking the scancode value. // left shift is 0x2A, right shift is 0x36. IsExtendedKey is always false. return (keyStatus.ScanCode==0x36) ? Keys.RightShift : Keys.LeftShift; // Note that the Alt key is now refered to as Menu. // ALT key doesn't get fired by KeyUp/KeyDown events. // One solution could be to check CoreWindow.GetKeyState(...) on every tick. case Windows.System.VirtualKey.Menu: return Keys.LeftAlt; default: return (Keys)inkey; } }
internal KeyEventArgs(string deviceId, VirtualKey virtualKey, CorePhysicalKeyStatus keyStatus) { DeviceId = deviceId; VirtualKey = virtualKey; KeyStatus = keyStatus; }
public KeyDownEvent(VirtualKey key, CorePhysicalKeyStatus keyStatus) { Key = key; KeyStatus = keyStatus; }
private bool HandleKey(VirtualKey virtualKey, CorePhysicalKeyStatus keyStatus, InputEventType type) { // If our EditText TextBox is active, let's ignore all key events if (Game.Context is GameContextUWP && ((GameContextUWP)Game.Context).EditTextBox.Parent != null) { return false; } // Remap certain keys switch (virtualKey) { case VirtualKey.Shift: // Only way to differentiate left and right shift is through the scan code virtualKey = keyStatus.ScanCode == 54 ? VirtualKey.RightShift : VirtualKey.LeftShift; break; case VirtualKey.Control: virtualKey = keyStatus.IsExtendedKey ? VirtualKey.RightControl : VirtualKey.LeftControl; break; case VirtualKey.Menu: virtualKey = keyStatus.IsExtendedKey ? VirtualKey.RightMenu : VirtualKey.LeftMenu; break; } // Let Alt + F4 go through if (virtualKey == VirtualKey.F4 && IsKeyDownNow(Keys.LeftAlt)) return false; Keys key; if (!mapKeys.TryGetValue(virtualKey, out key)) key = Keys.None; lock (KeyboardInputEvents) { KeyboardInputEvents.Add(new KeyboardInputEvent { Key = key, Type = type }); } return true; }