Layers/shell/windows/LayersShell/WinKeyMap.cs

55 lines
2.1 KiB
C#

using System;
using Microsoft.UI.Input;
using Windows.System;
namespace LayersShell;
internal static class WinKeyMap
{
public static uint MapVirtualKey(VirtualKey key) => key switch
{
VirtualKey.Enter => 1,
VirtualKey.Escape => 2,
VirtualKey.Back => 3,
VirtualKey.Tab => 4,
VirtualKey.Left => 5,
VirtualKey.Right => 6,
VirtualKey.Up => 7,
VirtualKey.Down => 8,
VirtualKey.Delete => 9,
VirtualKey.Home => 10,
VirtualKey.End => 11,
_ => 0,
};
public static string? TextForKey(VirtualKey key)
{
if (key >= VirtualKey.A && key <= VirtualKey.Z)
{
char c = (char)('a' + (int)(key - VirtualKey.A));
return c.ToString();
}
if (key >= VirtualKey.Number0 && key <= VirtualKey.Number9)
{
char c = (char)('0' + (int)(key - VirtualKey.Number0));
return c.ToString();
}
return key switch
{
VirtualKey.Space => " ",
_ => null,
};
}
public static uint CurrentModifiers()
{
uint m = 0;
if ((InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift) & Windows.UI.Core.CoreVirtualKeyStates.Down) == Windows.UI.Core.CoreVirtualKeyStates.Down) m |= 1;
if ((InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control) & Windows.UI.Core.CoreVirtualKeyStates.Down) == Windows.UI.Core.CoreVirtualKeyStates.Down) m |= 2;
if ((InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Menu) & Windows.UI.Core.CoreVirtualKeyStates.Down) == Windows.UI.Core.CoreVirtualKeyStates.Down) m |= 4;
if ((InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.LeftWindows) & Windows.UI.Core.CoreVirtualKeyStates.Down) == Windows.UI.Core.CoreVirtualKeyStates.Down) m |= 8;
if ((InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.RightWindows) & Windows.UI.Core.CoreVirtualKeyStates.Down) == Windows.UI.Core.CoreVirtualKeyStates.Down) m |= 8;
return m;
}
}