Skip to content

Instantly share code, notes, and snippets.

@aurimasniekis
Last active May 10, 2024 23:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aurimasniekis/f4cfcd834c8563d16ffc6f0a2a50a742 to your computer and use it in GitHub Desktop.
Save aurimasniekis/f4cfcd834c8563d16ffc6f0a2a50a742 to your computer and use it in GitHub Desktop.
A simple C# Keyboard Key generic class to map 4 different types of KeyBoard Key values from Win32 Key, Wpf Input Key, WinForm Key and JS Key

Generic Keyboard Key Mapper Util Class

I have encountered issue when developing platform universal C# code is that there are at least 3 different key maps. So I decided to make my own key type and map all other types from and to the values.

I decided to use int values of those mappings instead of Enums or other tricks, to not have dependency on those assemblies.

Supported from & to Types

Usage

// From Win32
public const VK_LCONTROL = 0xA2;
var key = KeyboardKey.FromWin32(VK_LCONTROL);

// From WPF Input.Key
var key = KeyboardKey.FromWinInput((int) System.Windows.Input.Key.LeftCtrl);

// From WinForm Forms.Key
var key = KeyboardKey.FromWinForm((int) System.Windows.Forms.Keys.LControlKey);

// From JS Key.key
var key = KeyboardKey.FromJs("Control");

// Create an Key
var key = KeyboardKey.LeftCtrl;

// To Win32 Key
var win32Key = key.ToWin32Key();

// To WPF Input.Key
var wpfKey = (System.Windows.Input.Key) key.ToWinInputKey();

// To WinForm Key
var winFormKey = (System.Windows.Forms.Keys) key.ToWinFormKey();

var jsKey = key.ToJavaScriptKey();

License

MIT License

Copyright (c) 2021 Aurimas Niekis

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

using System;
using System.Collections.Generic;
public class KeyboardKey : IEquatable<KeyboardKey>
{
public enum Keys
{
None,
Cancel,
Backspace,
Tab,
Clear,
Enter,
Pause,
CapsLock,
Escape,
Space,
PageUp,
PageDown,
End,
Home,
ArrowLeft,
ArrowUp,
ArrowRight,
ArrowDown,
Select,
Print,
Execute,
PrintScreen,
Insert,
Delete,
Help,
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8,
D9,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Meta,
LeftMeta,
RightMeta,
Apps,
Sleep,
NumPad0,
NumPad1,
NumPad2,
NumPad3,
NumPad4,
NumPad5,
NumPad6,
NumPad7,
NumPad8,
NumPad9,
Multiply,
Add,
Separator,
Subtract,
Decimal,
Divide,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
NumLock,
ScrollLock,
Shift,
LeftShift,
RightShift,
Control,
LeftControl,
RightControl,
Alt,
LeftAlt,
RightAlt,
BrowserBack,
BrowserForward,
BrowserRefresh,
BrowserStop,
BrowserSearch,
BrowserFavorites,
BrowserHome,
VolumeMute,
VolumeDown,
VolumeUp,
MediaNextTrack,
MediaPreviousTrack,
MediaStop,
MediaPlayPause,
LaunchMail,
SelectMedia,
LaunchApplication1,
LaunchApplication2,
SemiColon,
Plus,
Comma,
Minus,
Period,
QuestionMark,
OemTilde,
OpenBracket,
OemPipe,
CloseBracket,
Quote,
Backslash,
Play,
Zoom,
Unknown,
}
public enum KeySource
{
Internal,
Win32,
WinInput,
WinForm,
JavaScript
}
public static readonly KeyboardKey None = new(Keys.None);
public static readonly KeyboardKey Cancel = new(Keys.Cancel);
public static readonly KeyboardKey Backspace = new(Keys.Backspace);
public static readonly KeyboardKey Tab = new(Keys.Tab);
public static readonly KeyboardKey Clear = new(Keys.Clear);
public static readonly KeyboardKey Enter = new(Keys.Enter);
public static readonly KeyboardKey Pause = new(Keys.Pause);
public static readonly KeyboardKey CapsLock = new(Keys.CapsLock);
public static readonly KeyboardKey Escape = new(Keys.Escape);
public static readonly KeyboardKey Space = new(Keys.Space);
public static readonly KeyboardKey PageUp = new(Keys.PageUp);
public static readonly KeyboardKey PageDown = new(Keys.PageDown);
public static readonly KeyboardKey End = new(Keys.End);
public static readonly KeyboardKey Home = new(Keys.Home);
public static readonly KeyboardKey ArrowLeft = new(Keys.ArrowLeft);
public static readonly KeyboardKey ArrowUp = new(Keys.ArrowUp);
public static readonly KeyboardKey ArrowRight = new(Keys.ArrowRight);
public static readonly KeyboardKey ArrowDown = new(Keys.ArrowDown);
public static readonly KeyboardKey Select = new(Keys.Select);
public static readonly KeyboardKey Print = new(Keys.Print);
public static readonly KeyboardKey Execute = new(Keys.Execute);
public static readonly KeyboardKey PrintScreen = new(Keys.PrintScreen);
public static readonly KeyboardKey Insert = new(Keys.Insert);
public static readonly KeyboardKey Delete = new(Keys.Delete);
public static readonly KeyboardKey Help = new(Keys.Help);
public static readonly KeyboardKey D0 = new(Keys.D0);
public static readonly KeyboardKey D1 = new(Keys.D1);
public static readonly KeyboardKey D2 = new(Keys.D2);
public static readonly KeyboardKey D3 = new(Keys.D3);
public static readonly KeyboardKey D4 = new(Keys.D4);
public static readonly KeyboardKey D5 = new(Keys.D5);
public static readonly KeyboardKey D6 = new(Keys.D6);
public static readonly KeyboardKey D7 = new(Keys.D7);
public static readonly KeyboardKey D8 = new(Keys.D8);
public static readonly KeyboardKey D9 = new(Keys.D9);
public static readonly KeyboardKey A = new(Keys.A);
public static readonly KeyboardKey B = new(Keys.B);
public static readonly KeyboardKey C = new(Keys.C);
public static readonly KeyboardKey D = new(Keys.D);
public static readonly KeyboardKey E = new(Keys.E);
public static readonly KeyboardKey F = new(Keys.F);
public static readonly KeyboardKey G = new(Keys.G);
public static readonly KeyboardKey H = new(Keys.H);
public static readonly KeyboardKey I = new(Keys.I);
public static readonly KeyboardKey J = new(Keys.J);
public static readonly KeyboardKey K = new(Keys.K);
public static readonly KeyboardKey L = new(Keys.L);
public static readonly KeyboardKey M = new(Keys.M);
public static readonly KeyboardKey N = new(Keys.N);
public static readonly KeyboardKey O = new(Keys.O);
public static readonly KeyboardKey P = new(Keys.P);
public static readonly KeyboardKey Q = new(Keys.Q);
public static readonly KeyboardKey R = new(Keys.R);
public static readonly KeyboardKey S = new(Keys.S);
public static readonly KeyboardKey T = new(Keys.T);
public static readonly KeyboardKey U = new(Keys.U);
public static readonly KeyboardKey V = new(Keys.V);
public static readonly KeyboardKey W = new(Keys.W);
public static readonly KeyboardKey X = new(Keys.X);
public static readonly KeyboardKey Y = new(Keys.Y);
public static readonly KeyboardKey Z = new(Keys.Z);
public static readonly KeyboardKey Meta = new(Keys.Meta);
public static readonly KeyboardKey LeftMeta = new(Keys.LeftMeta);
public static readonly KeyboardKey RightMeta = new(Keys.RightMeta);
public static readonly KeyboardKey Apps = new(Keys.Apps);
public static readonly KeyboardKey Sleep = new(Keys.Sleep);
public static readonly KeyboardKey NumPad0 = new(Keys.NumPad0);
public static readonly KeyboardKey NumPad1 = new(Keys.NumPad1);
public static readonly KeyboardKey NumPad2 = new(Keys.NumPad2);
public static readonly KeyboardKey NumPad3 = new(Keys.NumPad3);
public static readonly KeyboardKey NumPad4 = new(Keys.NumPad4);
public static readonly KeyboardKey NumPad5 = new(Keys.NumPad5);
public static readonly KeyboardKey NumPad6 = new(Keys.NumPad6);
public static readonly KeyboardKey NumPad7 = new(Keys.NumPad7);
public static readonly KeyboardKey NumPad8 = new(Keys.NumPad8);
public static readonly KeyboardKey NumPad9 = new(Keys.NumPad9);
public static readonly KeyboardKey Multiply = new(Keys.Multiply);
public static readonly KeyboardKey Add = new(Keys.Add);
public static readonly KeyboardKey Separator = new(Keys.Separator);
public static readonly KeyboardKey Subtract = new(Keys.Subtract);
public static readonly KeyboardKey Decimal = new(Keys.Decimal);
public static readonly KeyboardKey Divide = new(Keys.Divide);
public static readonly KeyboardKey F1 = new(Keys.F1);
public static readonly KeyboardKey F2 = new(Keys.F2);
public static readonly KeyboardKey F3 = new(Keys.F3);
public static readonly KeyboardKey F4 = new(Keys.F4);
public static readonly KeyboardKey F5 = new(Keys.F5);
public static readonly KeyboardKey F6 = new(Keys.F6);
public static readonly KeyboardKey F7 = new(Keys.F7);
public static readonly KeyboardKey F8 = new(Keys.F8);
public static readonly KeyboardKey F9 = new(Keys.F9);
public static readonly KeyboardKey F10 = new(Keys.F10);
public static readonly KeyboardKey F11 = new(Keys.F11);
public static readonly KeyboardKey F12 = new(Keys.F12);
public static readonly KeyboardKey F13 = new(Keys.F13);
public static readonly KeyboardKey F14 = new(Keys.F14);
public static readonly KeyboardKey F15 = new(Keys.F15);
public static readonly KeyboardKey F16 = new(Keys.F16);
public static readonly KeyboardKey F17 = new(Keys.F17);
public static readonly KeyboardKey F18 = new(Keys.F18);
public static readonly KeyboardKey F19 = new(Keys.F19);
public static readonly KeyboardKey F20 = new(Keys.F20);
public static readonly KeyboardKey F21 = new(Keys.F21);
public static readonly KeyboardKey F22 = new(Keys.F22);
public static readonly KeyboardKey F23 = new(Keys.F23);
public static readonly KeyboardKey F24 = new(Keys.F24);
public static readonly KeyboardKey NumLock = new(Keys.NumLock);
public static readonly KeyboardKey ScrollLock = new(Keys.ScrollLock);
public static readonly KeyboardKey Shift = new(Keys.Shift);
public static readonly KeyboardKey LeftShift = new(Keys.LeftShift);
public static readonly KeyboardKey RightShift = new(Keys.RightShift);
public static readonly KeyboardKey Control = new(Keys.Control);
public static readonly KeyboardKey LeftControl = new(Keys.LeftControl);
public static readonly KeyboardKey RightControl = new(Keys.RightControl);
public static readonly KeyboardKey Alt = new(Keys.Alt);
public static readonly KeyboardKey LeftAlt = new(Keys.LeftAlt);
public static readonly KeyboardKey RightAlt = new(Keys.RightAlt);
public static readonly KeyboardKey BrowserBack = new(Keys.BrowserBack);
public static readonly KeyboardKey BrowserForward = new(Keys.BrowserForward);
public static readonly KeyboardKey BrowserRefresh = new(Keys.BrowserRefresh);
public static readonly KeyboardKey BrowserStop = new(Keys.BrowserStop);
public static readonly KeyboardKey BrowserSearch = new(Keys.BrowserSearch);
public static readonly KeyboardKey BrowserFavorites = new(Keys.BrowserFavorites);
public static readonly KeyboardKey BrowserHome = new(Keys.BrowserHome);
public static readonly KeyboardKey VolumeMute = new(Keys.VolumeMute);
public static readonly KeyboardKey VolumeDown = new(Keys.VolumeDown);
public static readonly KeyboardKey VolumeUp = new(Keys.VolumeUp);
public static readonly KeyboardKey MediaNextTrack = new(Keys.MediaNextTrack);
public static readonly KeyboardKey MediaPreviousTrack = new(Keys.MediaPreviousTrack);
public static readonly KeyboardKey MediaStop = new(Keys.MediaStop);
public static readonly KeyboardKey MediaPlayPause = new(Keys.MediaPlayPause);
public static readonly KeyboardKey LaunchMail = new(Keys.LaunchMail);
public static readonly KeyboardKey SelectMedia = new(Keys.SelectMedia);
public static readonly KeyboardKey LaunchApplication1 = new(Keys.LaunchApplication1);
public static readonly KeyboardKey LaunchApplication2 = new(Keys.LaunchApplication2);
public static readonly KeyboardKey SemiColon = new(Keys.SemiColon);
public static readonly KeyboardKey Plus = new(Keys.Plus);
public static readonly KeyboardKey Comma = new(Keys.Comma);
public static readonly KeyboardKey Minus = new(Keys.Minus);
public static readonly KeyboardKey Period = new(Keys.Period);
public static readonly KeyboardKey QuestionMark = new(Keys.QuestionMark);
public static readonly KeyboardKey OemTilde = new(Keys.OemTilde);
public static readonly KeyboardKey OpenBracket = new(Keys.OpenBracket);
public static readonly KeyboardKey OemPipe = new(Keys.OemPipe);
public static readonly KeyboardKey CloseBracket = new(Keys.CloseBracket);
public static readonly KeyboardKey Quote = new(Keys.Quote);
public static readonly KeyboardKey Backslash = new(Keys.Backslash);
public static readonly KeyboardKey Play = new(Keys.Play);
public static readonly KeyboardKey Zoom = new(Keys.Zoom);
private static readonly Dictionary<Keys, int[]> KeyToValues = new()
{
{Keys.None, new[] {0, 0, 0x00}},
{Keys.Cancel, new[] {1, 3, 0x03}},
{Keys.Backspace, new[] {2, 8, 0x08}},
{Keys.Tab, new[] {3, 9, 0x09}},
{Keys.Clear, new[] {5, 12, 0x0C}},
{Keys.Enter, new[] {6, 13, 0x0D}},
{Keys.Pause, new[] {7, 19, 0x13}},
{Keys.CapsLock, new[] {8, 20, 0x14}},
{Keys.Escape, new[] {13, 27, 0x1B}},
{Keys.Space, new[] {18, 32, 0x20}},
{Keys.PageUp, new[] {19, 33, 0x21}},
{Keys.PageDown, new[] {20, 34, 0x22}},
{Keys.End, new[] {21, 35, 0x23}},
{Keys.Home, new[] {22, 36, 0x24}},
{Keys.ArrowLeft, new[] {23, 37, 0x25}},
{Keys.ArrowUp, new[] {24, 38, 0x26}},
{Keys.ArrowRight, new[] {25, 39, 0x27}},
{Keys.ArrowDown, new[] {26, 40, 0x28}},
{Keys.Select, new[] {27, 41, 0x29}},
{Keys.Print, new[] {28, 42, 0x2A}},
{Keys.Execute, new[] {29, 43, 0x2B}},
{Keys.PrintScreen, new[] {30, 44, 0x2C}},
{Keys.Insert, new[] {31, 45, 0x2D}},
{Keys.Delete, new[] {32, 46, 0x2E}},
{Keys.Help, new[] {33, 47, 0x2F}},
{Keys.D0, new[] {34, 48, 0x30}},
{Keys.D1, new[] {35, 49, 0x31}},
{Keys.D2, new[] {36, 50, 0x32}},
{Keys.D3, new[] {37, 51, 0x33}},
{Keys.D4, new[] {38, 52, 0x34}},
{Keys.D5, new[] {39, 53, 0x35}},
{Keys.D6, new[] {40, 54, 0x36}},
{Keys.D7, new[] {41, 55, 0x37}},
{Keys.D8, new[] {42, 56, 0x38}},
{Keys.D9, new[] {43, 57, 0x39}},
{Keys.A, new[] {44, 65, 0x41}},
{Keys.B, new[] {45, 66, 0x42}},
{Keys.C, new[] {46, 67, 0x43}},
{Keys.D, new[] {47, 68, 0x44}},
{Keys.E, new[] {48, 69, 0x45}},
{Keys.F, new[] {49, 70, 0x46}},
{Keys.G, new[] {50, 71, 0x47}},
{Keys.H, new[] {51, 72, 0x48}},
{Keys.I, new[] {52, 73, 0x49}},
{Keys.J, new[] {53, 74, 0x4A}},
{Keys.K, new[] {54, 75, 0x4B}},
{Keys.L, new[] {55, 76, 0x4C}},
{Keys.M, new[] {56, 77, 0x4D}},
{Keys.N, new[] {57, 78, 0x4E}},
{Keys.O, new[] {58, 79, 0x4F}},
{Keys.P, new[] {59, 80, 0x50}},
{Keys.Q, new[] {60, 81, 0x51}},
{Keys.R, new[] {61, 82, 0x52}},
{Keys.S, new[] {62, 83, 0x53}},
{Keys.T, new[] {63, 84, 0x54}},
{Keys.U, new[] {64, 85, 0x55}},
{Keys.V, new[] {65, 86, 0x56}},
{Keys.W, new[] {66, 87, 0x57}},
{Keys.X, new[] {67, 88, 0x58}},
{Keys.Y, new[] {68, 89, 0x59}},
{Keys.Z, new[] {69, 90, 0x5A}},
{Keys.Meta, new[] {70, 91, 0x5B}},
{Keys.LeftMeta, new[] {70, 91, 0x5B}},
{Keys.RightMeta, new[] {71, 92, 0x5C}},
{Keys.Apps, new[] {72, 93, 0x5D}},
{Keys.Sleep, new[] {73, 95, 0x5F}},
{Keys.NumPad0, new[] {74, 96, 0x60}},
{Keys.NumPad1, new[] {75, 97, 0x61}},
{Keys.NumPad2, new[] {76, 98, 0x62}},
{Keys.NumPad3, new[] {77, 99, 0x63}},
{Keys.NumPad4, new[] {78, 100, 0x64}},
{Keys.NumPad5, new[] {79, 101, 0x65}},
{Keys.NumPad6, new[] {80, 102, 0x66}},
{Keys.NumPad7, new[] {81, 103, 0x67}},
{Keys.NumPad8, new[] {82, 104, 0x68}},
{Keys.NumPad9, new[] {83, 105, 0x69}},
{Keys.Multiply, new[] {84, 106, 0x6A}},
{Keys.Add, new[] {85, 107, 0x6B}},
{Keys.Separator, new[] {86, 108, 0x6C}},
{Keys.Subtract, new[] {87, 109, 0x6D}},
{Keys.Decimal, new[] {88, 110, 0x6E}},
{Keys.Divide, new[] {89, 111, 0x6F}},
{Keys.F1, new[] {90, 112, 0x70}},
{Keys.F2, new[] {91, 113, 0x71}},
{Keys.F3, new[] {92, 114, 0x72}},
{Keys.F4, new[] {93, 115, 0x73}},
{Keys.F5, new[] {94, 116, 0x74}},
{Keys.F6, new[] {95, 117, 0x75}},
{Keys.F7, new[] {96, 118, 0x76}},
{Keys.F8, new[] {97, 119, 0x77}},
{Keys.F9, new[] {98, 120, 0x78}},
{Keys.F10, new[] {99, 121, 0x79}},
{Keys.F11, new[] {100, 122, 0x7A}},
{Keys.F12, new[] {101, 123, 0x7B}},
{Keys.F13, new[] {102, 124, 0x7C}},
{Keys.F14, new[] {103, 125, 0x7D}},
{Keys.F15, new[] {104, 126, 0x7E}},
{Keys.F16, new[] {105, 127, 0x7F}},
{Keys.F17, new[] {106, 128, 0x80}},
{Keys.F18, new[] {107, 129, 0x81}},
{Keys.F19, new[] {108, 130, 0x82}},
{Keys.F20, new[] {109, 131, 0x83}},
{Keys.F21, new[] {110, 132, 0x84}},
{Keys.F22, new[] {111, 133, 0x85}},
{Keys.F23, new[] {112, 134, 0x86}},
{Keys.F24, new[] {113, 135, 0x87}},
{Keys.NumLock, new[] {114, 144, 0x90}},
{Keys.ScrollLock, new[] {115, 145, 0x91}},
{Keys.Shift, new[] {116, 160, 0xA0}},
{Keys.LeftShift, new[] {116, 160, 0xA0}},
{Keys.RightShift, new[] {117, 161, 0xA1}},
{Keys.Control, new[] {118, 162, 0xA2}},
{Keys.LeftControl, new[] {118, 162, 0xA2}},
{Keys.RightControl, new[] {119, 163, 0xA3}},
{Keys.Alt, new[] {120, 164, 0xA4}},
{Keys.LeftAlt, new[] {120, 164, 0xA4}},
{Keys.RightAlt, new[] {121, 165, 0xA5}},
{Keys.BrowserBack, new[] {122, 166, 0xA6}},
{Keys.BrowserForward, new[] {123, 167, 0xA7}},
{Keys.BrowserRefresh, new[] {124, 168, 0xA8}},
{Keys.BrowserStop, new[] {125, 169, 0xA9}},
{Keys.BrowserSearch, new[] {126, 170, 0xAA}},
{Keys.BrowserFavorites, new[] {127, 171, 0xAB}},
{Keys.BrowserHome, new[] {128, 172, 0xAC}},
{Keys.VolumeMute, new[] {129, 173, 0xAD}},
{Keys.VolumeDown, new[] {130, 174, 0xAE}},
{Keys.VolumeUp, new[] {131, 175, 0xAF}},
{Keys.MediaNextTrack, new[] {132, 176, 0xB0}},
{Keys.MediaPreviousTrack, new[] {133, 177, 0xB1}},
{Keys.MediaStop, new[] {134, 178, 0xB2}},
{Keys.MediaPlayPause, new[] {135, 179, 0xB3}},
{Keys.LaunchMail, new[] {136, 180, 0xB4}},
{Keys.SelectMedia, new[] {137, 181, 0xB5}},
{Keys.LaunchApplication1, new[] {138, 182, 0xB6}},
{Keys.LaunchApplication2, new[] {139, 183, 0xB7}},
{Keys.SemiColon, new[] {140, 186, 0xBA}},
{Keys.Plus, new[] {141, 187, 0xBB}},
{Keys.Comma, new[] {142, 188, 0xBC}},
{Keys.Minus, new[] {143, 189, 0xBD}},
{Keys.Period, new[] {144, 190, 0xBE}},
{Keys.QuestionMark, new[] {145, 191, 0xBF}},
{Keys.OemTilde, new[] {146, 192, 0xC0}},
{Keys.OpenBracket, new[] {149, 219, 0xDB}},
{Keys.OemPipe, new[] {150, 220, 0xDC}},
{Keys.CloseBracket, new[] {151, 221, 0xDD}},
{Keys.Quote, new[] {152, 222, 0xDE}},
{Keys.Backslash, new[] {154, 226, 0xE2}},
{Keys.Play, new[] {167, 250, 0xFA}},
{Keys.Zoom, new[] {168, 251, 0xFB}}
};
public static KeyboardKey Unknown = new(Keys.Unknown);
private static readonly Dictionary<Keys, string> KeyToJsValues = new()
{
{Keys.None, "Unidentified"},
{Keys.Cancel, "Cancel"},
{Keys.Backspace, "Backspace"},
{Keys.Tab, "Tab"},
{Keys.Clear, "Clear"},
{Keys.Enter, "Enter"},
{Keys.Pause, "Pause"},
{Keys.CapsLock, "CapsLock"},
{Keys.Escape, "Escape"},
{Keys.Space, " "},
{Keys.PageUp, "PageUp"},
{Keys.PageDown, "PageDown"},
{Keys.End, "End"},
{Keys.Home, "Home"},
{Keys.ArrowLeft, "ArrowLeft"},
{Keys.ArrowUp, "ArrowUp"},
{Keys.ArrowRight, "ArrowRight"},
{Keys.ArrowDown, "ArrowDown"},
{Keys.Select, "Select"},
{Keys.Print, "PrintScreen"},
{Keys.Execute, "Execute"},
{Keys.PrintScreen, "PrintScreen"},
{Keys.Insert, "Insert"},
{Keys.Delete, "Delete"},
{Keys.Help, "Help"},
{Keys.D0, "0"},
{Keys.D1, "1"},
{Keys.D2, "2"},
{Keys.D3, "3"},
{Keys.D4, "4"},
{Keys.D5, "5"},
{Keys.D6, "6"},
{Keys.D7, "7"},
{Keys.D8, "8"},
{Keys.D9, "9"},
{Keys.A, "a"},
{Keys.B, "b"},
{Keys.C, "c"},
{Keys.D, "d"},
{Keys.E, "e"},
{Keys.F, "f"},
{Keys.G, "g"},
{Keys.H, "h"},
{Keys.I, "i"},
{Keys.J, "j"},
{Keys.K, "k"},
{Keys.L, "l"},
{Keys.M, "m"},
{Keys.N, "n"},
{Keys.O, "o"},
{Keys.P, "p"},
{Keys.Q, "q"},
{Keys.R, "r"},
{Keys.S, "s"},
{Keys.T, "t"},
{Keys.U, "u"},
{Keys.V, "v"},
{Keys.W, "w"},
{Keys.X, "x"},
{Keys.Y, "y"},
{Keys.Z, "z"},
{Keys.Meta, "Meta"},
{Keys.LeftMeta, "Meta"},
{Keys.RightMeta, "Meta"},
{Keys.Apps, "AppSwitch"},
{Keys.Sleep, "Standby"},
{Keys.NumPad0, "0"},
{Keys.NumPad1, "1"},
{Keys.NumPad2, "2"},
{Keys.NumPad3, "3"},
{Keys.NumPad4, "4"},
{Keys.NumPad5, "5"},
{Keys.NumPad6, "6"},
{Keys.NumPad7, "7"},
{Keys.NumPad8, "8"},
{Keys.NumPad9, "9"},
{Keys.Multiply, "Multiply"},
{Keys.Add, "Add"},
{Keys.Separator, "Separator"},
{Keys.Subtract, "Subtract"},
{Keys.Decimal, "Decimal"},
{Keys.Divide, "Divide"},
{Keys.F1, "F1"},
{Keys.F2, "F2"},
{Keys.F3, "F3"},
{Keys.F4, "F4"},
{Keys.F5, "F5"},
{Keys.F6, "F6"},
{Keys.F7, "F7"},
{Keys.F8, "F8"},
{Keys.F9, "F9"},
{Keys.F10, "F10"},
{Keys.F11, "F11"},
{Keys.F12, "F12"},
{Keys.F13, "F13"},
{Keys.F14, "F14"},
{Keys.F15, "F15"},
{Keys.F16, "F16"},
{Keys.F17, "F17"},
{Keys.F18, "F18"},
{Keys.F19, "F19"},
{Keys.F20, "F20"},
{Keys.F21, "Unidentified"},
{Keys.F22, "Unidentified"},
{Keys.F23, "Unidentified"},
{Keys.F24, "Unidentified"},
{Keys.NumLock, "NumLock"},
{Keys.ScrollLock, "ScrollLock"},
{Keys.Shift, "Shift"},
{Keys.LeftShift, "Shift"},
{Keys.RightShift, "Shift"},
{Keys.Control, "Control"},
{Keys.LeftControl, "Control"},
{Keys.RightControl, "Control"},
{Keys.Alt, "Alt"},
{Keys.LeftAlt, "Alt"},
{Keys.RightAlt, "Alt"},
{Keys.BrowserBack, "BrowserBack"},
{Keys.BrowserForward, "BrowserForward"},
{Keys.BrowserRefresh, "BrowserRefresh"},
{Keys.BrowserStop, "BrowserStop"},
{Keys.BrowserSearch, "BrowserSearch"},
{Keys.BrowserFavorites, "BrowserFavorites"},
{Keys.BrowserHome, "BrowserHome"},
{Keys.VolumeMute, "AudioVolumeMute"},
{Keys.VolumeDown, "AudioVolumeDown"},
{Keys.VolumeUp, "AudioVolumeUp"},
{Keys.MediaNextTrack, "MediaTrackNext"},
{Keys.MediaPreviousTrack, "MediaTrackPrevious"},
{Keys.MediaStop, "MediaStop"},
{Keys.MediaPlayPause, "MediaPlayPause"},
{Keys.LaunchMail, "LaunchMail"},
{Keys.SelectMedia, "LaunchMediaPlayer"},
{Keys.LaunchApplication1, "LaunchApplication1"},
{Keys.LaunchApplication2, "LaunchApplication2"},
{Keys.SemiColon, ";"},
{Keys.Plus, "+"},
{Keys.Comma, ","},
{Keys.Minus, "-"},
{Keys.Period, "."},
{Keys.QuestionMark, "?"},
{Keys.OemTilde, "~"},
{Keys.OpenBracket, "["},
{Keys.OemPipe, "|"},
{Keys.CloseBracket, "]"},
{Keys.Quote, "'"},
{Keys.Backslash, "\\"},
{Keys.Play, "Play"},
{Keys.Zoom, "ZoomToggle"}
};
protected static Dictionary<string, Keys> JsToKeys = new()
{
{"Unidentified", Keys.None},
{"Cancel", Keys.Cancel},
{"Backspace", Keys.Backspace},
{"Tab", Keys.Tab},
{"Clear", Keys.Clear},
{"Enter", Keys.Enter},
{"Pause", Keys.Pause},
{"CapsLock", Keys.CapsLock},
{"Escape", Keys.Escape},
{" ", Keys.Space},
{"PageUp", Keys.PageUp},
{"PageDown", Keys.PageDown},
{"End", Keys.End},
{"Home", Keys.Home},
{"ArrowLeft", Keys.ArrowLeft},
{"ArrowUp", Keys.ArrowUp},
{"ArrowRight", Keys.ArrowRight},
{"ArrowDown", Keys.ArrowDown},
{"Select", Keys.Select},
{"PrintScreen", Keys.Print},
{"Execute", Keys.Execute},
{"PrintScreen", Keys.PrintScreen},
{"Insert", Keys.Insert},
{"Delete", Keys.Delete},
{"Help", Keys.Help},
{"0", Keys.D0},
{"1", Keys.D1},
{"2", Keys.D2},
{"3", Keys.D3},
{"4", Keys.D4},
{"5", Keys.D5},
{"6", Keys.D6},
{"7", Keys.D7},
{"8", Keys.D8},
{"9", Keys.D9},
{"a", Keys.A},
{"b", Keys.B},
{"c", Keys.C},
{"d", Keys.D},
{"e", Keys.E},
{"f", Keys.F},
{"g", Keys.G},
{"h", Keys.H},
{"i", Keys.I},
{"j", Keys.J},
{"k", Keys.K},
{"l", Keys.L},
{"m", Keys.M},
{"n", Keys.N},
{"o", Keys.O},
{"p", Keys.P},
{"q", Keys.Q},
{"r", Keys.R},
{"s", Keys.S},
{"t", Keys.T},
{"u", Keys.U},
{"v", Keys.V},
{"w", Keys.W},
{"x", Keys.X},
{"y", Keys.Y},
{"z", Keys.Z},
{"Meta", Keys.Meta},
{"AppSwitch", Keys.Apps},
{"Standby", Keys.Sleep},
{"0", Keys.NumPad0},
{"1", Keys.NumPad1},
{"2", Keys.NumPad2},
{"3", Keys.NumPad3},
{"4", Keys.NumPad4},
{"5", Keys.NumPad5},
{"6", Keys.NumPad6},
{"7", Keys.NumPad7},
{"8", Keys.NumPad8},
{"9", Keys.NumPad9},
{"Multiply", Keys.Multiply},
{"Add", Keys.Add},
{"Separator", Keys.Separator},
{"Subtract", Keys.Subtract},
{"Decimal", Keys.Decimal},
{"Divide", Keys.Divide},
{"F1", Keys.F1},
{"F2", Keys.F2},
{"F3", Keys.F3},
{"F4", Keys.F4},
{"F5", Keys.F5},
{"F6", Keys.F6},
{"F7", Keys.F7},
{"F8", Keys.F8},
{"F9", Keys.F9},
{"F10", Keys.F10},
{"F11", Keys.F11},
{"F12", Keys.F12},
{"F13", Keys.F13},
{"F14", Keys.F14},
{"F15", Keys.F15},
{"F16", Keys.F16},
{"F17", Keys.F17},
{"F18", Keys.F18},
{"F19", Keys.F19},
{"F20", Keys.F20},
{"Unidentified", Keys.F21},
{"Unidentified", Keys.F22},
{"Unidentified", Keys.F23},
{"Unidentified", Keys.F24},
{"NumLock", Keys.NumLock},
{"ScrollLock", Keys.ScrollLock},
{"Shift", Keys.Shift},
{"Control", Keys.Control},
{"Alt", Keys.Alt},
{"BrowserBack", Keys.BrowserBack},
{"BrowserForward", Keys.BrowserForward},
{"BrowserRefresh", Keys.BrowserRefresh},
{"BrowserStop", Keys.BrowserStop},
{"BrowserSearch", Keys.BrowserSearch},
{"BrowserFavorites", Keys.BrowserFavorites},
{"BrowserHome", Keys.BrowserHome},
{"AudioVolumeMute", Keys.VolumeMute},
{"AudioVolumeDown", Keys.VolumeDown},
{"AudioVolumeUp", Keys.VolumeUp},
{"MediaTrackNext", Keys.MediaNextTrack},
{"MediaTrackPrevious", Keys.MediaPreviousTrack},
{"MediaStop", Keys.MediaStop},
{"MediaPlayPause", Keys.MediaPlayPause},
{"LaunchMail", Keys.LaunchMail},
{"LaunchMediaPlayer", Keys.SelectMedia},
{"LaunchApplication1", Keys.LaunchApplication1},
{"LaunchApplication2", Keys.LaunchApplication2},
{";", Keys.SemiColon},
{"+", Keys.Plus},
{",", Keys.Comma},
{"-", Keys.Minus},
{".", Keys.Period},
{"?", Keys.QuestionMark},
{"~", Keys.OemTilde},
{"[", Keys.OpenBracket},
{"|", Keys.OemPipe},
{"]", Keys.CloseBracket},
{"'", Keys.Quote},
{"\\", Keys.Backslash},
{"Play", Keys.Play},
{"ZoomToggle", Keys.Zoom}
};
private static readonly Dictionary<int, Keys> Win32ToKey = new()
{
{0x00, Keys.None},
{0x03, Keys.Cancel},
{0x08, Keys.Backspace},
{0x09, Keys.Tab},
{0x0C, Keys.Clear},
{0x0D, Keys.Enter},
{0x0D, Keys.Enter},
{0x13, Keys.Pause},
{0x14, Keys.CapsLock},
{0x14, Keys.CapsLock},
{0x1B, Keys.Escape},
{0x20, Keys.Space},
{0x21, Keys.PageUp},
{0x21, Keys.PageUp},
{0x22, Keys.PageDown},
{0x22, Keys.PageDown},
{0x23, Keys.End},
{0x24, Keys.Home},
{0x25, Keys.ArrowLeft},
{0x26, Keys.ArrowUp},
{0x27, Keys.ArrowRight},
{0x28, Keys.ArrowDown},
{0x29, Keys.Select},
{0x2A, Keys.Print},
{0x2B, Keys.Execute},
{0x2C, Keys.PrintScreen},
{0x2C, Keys.PrintScreen},
{0x2D, Keys.Insert},
{0x2E, Keys.Delete},
{0x2F, Keys.Help},
{0x30, Keys.D0},
{0x31, Keys.D1},
{0x32, Keys.D2},
{0x33, Keys.D3},
{0x34, Keys.D4},
{0x35, Keys.D5},
{0x36, Keys.D6},
{0x37, Keys.D7},
{0x38, Keys.D8},
{0x39, Keys.D9},
{0x41, Keys.A},
{0x42, Keys.B},
{0x43, Keys.C},
{0x44, Keys.D},
{0x45, Keys.E},
{0x46, Keys.F},
{0x47, Keys.G},
{0x48, Keys.H},
{0x49, Keys.I},
{0x4A, Keys.J},
{0x4B, Keys.K},
{0x4C, Keys.L},
{0x4D, Keys.M},
{0x4E, Keys.N},
{0x4F, Keys.O},
{0x50, Keys.P},
{0x51, Keys.Q},
{0x52, Keys.R},
{0x53, Keys.S},
{0x54, Keys.T},
{0x55, Keys.U},
{0x56, Keys.V},
{0x57, Keys.W},
{0x58, Keys.X},
{0x59, Keys.Y},
{0x5A, Keys.Z},
{0x5B, Keys.LeftMeta},
{0x5C, Keys.RightMeta},
{0x5D, Keys.Apps},
{0x5F, Keys.Sleep},
{0x60, Keys.NumPad0},
{0x61, Keys.NumPad1},
{0x62, Keys.NumPad2},
{0x63, Keys.NumPad3},
{0x64, Keys.NumPad4},
{0x65, Keys.NumPad5},
{0x66, Keys.NumPad6},
{0x67, Keys.NumPad7},
{0x68, Keys.NumPad8},
{0x69, Keys.NumPad9},
{0x6A, Keys.Multiply},
{0x6B, Keys.Add},
{0x6C, Keys.Separator},
{0x6D, Keys.Subtract},
{0x6E, Keys.Decimal},
{0x6F, Keys.Divide},
{0x70, Keys.F1},
{0x71, Keys.F2},
{0x72, Keys.F3},
{0x73, Keys.F4},
{0x74, Keys.F5},
{0x75, Keys.F6},
{0x76, Keys.F7},
{0x77, Keys.F8},
{0x78, Keys.F9},
{0x79, Keys.F10},
{0x7A, Keys.F11},
{0x7B, Keys.F12},
{0x7C, Keys.F13},
{0x7D, Keys.F14},
{0x7E, Keys.F15},
{0x7F, Keys.F16},
{0x80, Keys.F17},
{0x81, Keys.F18},
{0x82, Keys.F19},
{0x83, Keys.F20},
{0x84, Keys.F21},
{0x85, Keys.F22},
{0x86, Keys.F23},
{0x87, Keys.F24},
{0x90, Keys.NumLock},
{0x91, Keys.ScrollLock},
{0xA0, Keys.LeftShift},
{0xA1, Keys.RightShift},
{0xA2, Keys.LeftControl},
{0xA3, Keys.RightControl},
{0xA4, Keys.LeftAlt},
{0xA5, Keys.RightAlt},
{0xA6, Keys.BrowserBack},
{0xA7, Keys.BrowserForward},
{0xA8, Keys.BrowserRefresh},
{0xA9, Keys.BrowserStop},
{0xAA, Keys.BrowserSearch},
{0xAB, Keys.BrowserFavorites},
{0xAC, Keys.BrowserHome},
{0xAD, Keys.VolumeMute},
{0xAE, Keys.VolumeDown},
{0xAF, Keys.VolumeUp},
{0xB0, Keys.MediaNextTrack},
{0xB1, Keys.MediaPreviousTrack},
{0xB2, Keys.MediaStop},
{0xB3, Keys.MediaPlayPause},
{0xB4, Keys.LaunchMail},
{0xB5, Keys.SelectMedia},
{0xB6, Keys.LaunchApplication1},
{0xB7, Keys.LaunchApplication2},
{0xBA, Keys.SemiColon},
{0xBA, Keys.SemiColon},
{0xBB, Keys.Plus},
{0xBC, Keys.Comma},
{0xBD, Keys.Minus},
{0xBE, Keys.Period},
{0xBF, Keys.QuestionMark},
{0xBF, Keys.QuestionMark},
{0xC0, Keys.OemTilde},
{0xC0, Keys.OemTilde},
{0xDB, Keys.OpenBracket},
{0xDB, Keys.OpenBracket},
{0xDC, Keys.OemPipe},
{0xDC, Keys.OemPipe},
{0xDD, Keys.CloseBracket},
{0xDD, Keys.CloseBracket},
{0xDE, Keys.Quote},
{0xDE, Keys.Quote},
{0xE2, Keys.Backslash},
{0xE2, Keys.Backslash},
{0xFA, Keys.Play},
{0xFB, Keys.Zoom},
{0xFE, Keys.Clear}
};
private static readonly Dictionary<int, Keys> WinInputToKey = new()
{
{0, Keys.None},
{1, Keys.Cancel},
{2, Keys.Backspace},
{3, Keys.Tab},
{5, Keys.Clear},
{6, Keys.Enter},
{6, Keys.Enter},
{7, Keys.Pause},
{8, Keys.CapsLock},
{8, Keys.CapsLock},
{13, Keys.Escape},
{18, Keys.Space},
{19, Keys.PageUp},
{19, Keys.PageUp},
{20, Keys.PageDown},
{20, Keys.PageDown},
{21, Keys.End},
{22, Keys.Home},
{23, Keys.ArrowLeft},
{24, Keys.ArrowUp},
{25, Keys.ArrowRight},
{26, Keys.ArrowDown},
{27, Keys.Select},
{28, Keys.Print},
{29, Keys.Execute},
{30, Keys.PrintScreen},
{30, Keys.PrintScreen},
{31, Keys.Insert},
{32, Keys.Delete},
{33, Keys.Help},
{34, Keys.D0},
{35, Keys.D1},
{36, Keys.D2},
{37, Keys.D3},
{38, Keys.D4},
{39, Keys.D5},
{40, Keys.D6},
{41, Keys.D7},
{42, Keys.D8},
{43, Keys.D9},
{44, Keys.A},
{45, Keys.B},
{46, Keys.C},
{47, Keys.D},
{48, Keys.E},
{49, Keys.F},
{50, Keys.G},
{51, Keys.H},
{52, Keys.I},
{53, Keys.J},
{54, Keys.K},
{55, Keys.L},
{56, Keys.M},
{57, Keys.N},
{58, Keys.O},
{59, Keys.P},
{60, Keys.Q},
{61, Keys.R},
{62, Keys.S},
{63, Keys.T},
{64, Keys.U},
{65, Keys.V},
{66, Keys.W},
{67, Keys.X},
{68, Keys.Y},
{69, Keys.Z},
{70, Keys.LeftMeta},
{71, Keys.RightMeta},
{72, Keys.Apps},
{73, Keys.Sleep},
{74, Keys.NumPad0},
{75, Keys.NumPad1},
{76, Keys.NumPad2},
{77, Keys.NumPad3},
{78, Keys.NumPad4},
{79, Keys.NumPad5},
{80, Keys.NumPad6},
{81, Keys.NumPad7},
{82, Keys.NumPad8},
{83, Keys.NumPad9},
{84, Keys.Multiply},
{85, Keys.Add},
{86, Keys.Separator},
{87, Keys.Subtract},
{88, Keys.Decimal},
{89, Keys.Divide},
{90, Keys.F1},
{91, Keys.F2},
{92, Keys.F3},
{93, Keys.F4},
{94, Keys.F5},
{95, Keys.F6},
{96, Keys.F7},
{97, Keys.F8},
{98, Keys.F9},
{99, Keys.F10},
{100, Keys.F11},
{101, Keys.F12},
{102, Keys.F13},
{103, Keys.F14},
{104, Keys.F15},
{105, Keys.F16},
{106, Keys.F17},
{107, Keys.F18},
{108, Keys.F19},
{109, Keys.F20},
{110, Keys.F21},
{111, Keys.F22},
{112, Keys.F23},
{113, Keys.F24},
{114, Keys.NumLock},
{115, Keys.ScrollLock},
{116, Keys.LeftShift},
{117, Keys.RightShift},
{118, Keys.LeftControl},
{119, Keys.RightControl},
{120, Keys.LeftAlt},
{121, Keys.RightAlt},
{122, Keys.BrowserBack},
{123, Keys.BrowserForward},
{124, Keys.BrowserRefresh},
{125, Keys.BrowserStop},
{126, Keys.BrowserSearch},
{127, Keys.BrowserFavorites},
{128, Keys.BrowserHome},
{129, Keys.VolumeMute},
{130, Keys.VolumeDown},
{131, Keys.VolumeUp},
{132, Keys.MediaNextTrack},
{133, Keys.MediaPreviousTrack},
{134, Keys.MediaStop},
{135, Keys.MediaPlayPause},
{136, Keys.LaunchMail},
{137, Keys.SelectMedia},
{138, Keys.LaunchApplication1},
{139, Keys.LaunchApplication2},
{140, Keys.SemiColon},
{140, Keys.SemiColon},
{141, Keys.Plus},
{142, Keys.Comma},
{143, Keys.Minus},
{144, Keys.Period},
{145, Keys.QuestionMark},
{145, Keys.QuestionMark},
{146, Keys.OemTilde},
{146, Keys.OemTilde},
{149, Keys.OpenBracket},
{149, Keys.OpenBracket},
{150, Keys.OemPipe},
{150, Keys.OemPipe},
{151, Keys.CloseBracket},
{151, Keys.CloseBracket},
{152, Keys.Quote},
{152, Keys.Quote},
{154, Keys.Backslash},
{154, Keys.Backslash},
{167, Keys.Play},
{168, Keys.Zoom},
{171, Keys.Clear}
};
private static readonly Dictionary<int, Keys> WinFormToKey = new()
{
{0, Keys.None},
{3, Keys.Cancel},
{8, Keys.Backspace},
{9, Keys.Tab},
{12, Keys.Clear},
{13, Keys.Enter},
{13, Keys.Enter},
{19, Keys.Pause},
{20, Keys.CapsLock},
{20, Keys.CapsLock},
{27, Keys.Escape},
{32, Keys.Space},
{33, Keys.PageUp},
{33, Keys.PageUp},
{34, Keys.PageDown},
{34, Keys.PageDown},
{35, Keys.End},
{36, Keys.Home},
{37, Keys.ArrowLeft},
{38, Keys.ArrowUp},
{39, Keys.ArrowRight},
{40, Keys.ArrowDown},
{41, Keys.Select},
{42, Keys.Print},
{43, Keys.Execute},
{44, Keys.PrintScreen},
{44, Keys.PrintScreen},
{45, Keys.Insert},
{46, Keys.Delete},
{47, Keys.Help},
{48, Keys.D0},
{49, Keys.D1},
{50, Keys.D2},
{51, Keys.D3},
{52, Keys.D4},
{53, Keys.D5},
{54, Keys.D6},
{55, Keys.D7},
{56, Keys.D8},
{57, Keys.D9},
{65, Keys.A},
{66, Keys.B},
{67, Keys.C},
{68, Keys.D},
{69, Keys.E},
{70, Keys.F},
{71, Keys.G},
{72, Keys.H},
{73, Keys.I},
{74, Keys.J},
{75, Keys.K},
{76, Keys.L},
{77, Keys.M},
{78, Keys.N},
{79, Keys.O},
{80, Keys.P},
{81, Keys.Q},
{82, Keys.R},
{83, Keys.S},
{84, Keys.T},
{85, Keys.U},
{86, Keys.V},
{87, Keys.W},
{88, Keys.X},
{89, Keys.Y},
{90, Keys.Z},
{91, Keys.LeftMeta},
{92, Keys.RightMeta},
{93, Keys.Apps},
{95, Keys.Sleep},
{96, Keys.NumPad0},
{97, Keys.NumPad1},
{98, Keys.NumPad2},
{99, Keys.NumPad3},
{100, Keys.NumPad4},
{101, Keys.NumPad5},
{102, Keys.NumPad6},
{103, Keys.NumPad7},
{104, Keys.NumPad8},
{105, Keys.NumPad9},
{106, Keys.Multiply},
{107, Keys.Add},
{108, Keys.Separator},
{109, Keys.Subtract},
{110, Keys.Decimal},
{111, Keys.Divide},
{112, Keys.F1},
{113, Keys.F2},
{114, Keys.F3},
{115, Keys.F4},
{116, Keys.F5},
{117, Keys.F6},
{118, Keys.F7},
{119, Keys.F8},
{120, Keys.F9},
{121, Keys.F10},
{122, Keys.F11},
{123, Keys.F12},
{124, Keys.F13},
{125, Keys.F14},
{126, Keys.F15},
{127, Keys.F16},
{128, Keys.F17},
{129, Keys.F18},
{130, Keys.F19},
{131, Keys.F20},
{132, Keys.F21},
{133, Keys.F22},
{134, Keys.F23},
{135, Keys.F24},
{144, Keys.NumLock},
{145, Keys.ScrollLock},
{160, Keys.LeftShift},
{161, Keys.RightShift},
{162, Keys.LeftControl},
{163, Keys.RightControl},
{164, Keys.LeftAlt},
{165, Keys.RightAlt},
{166, Keys.BrowserBack},
{167, Keys.BrowserForward},
{168, Keys.BrowserRefresh},
{169, Keys.BrowserStop},
{170, Keys.BrowserSearch},
{171, Keys.BrowserFavorites},
{172, Keys.BrowserHome},
{173, Keys.VolumeMute},
{174, Keys.VolumeDown},
{175, Keys.VolumeUp},
{176, Keys.MediaNextTrack},
{177, Keys.MediaPreviousTrack},
{178, Keys.MediaStop},
{179, Keys.MediaPlayPause},
{180, Keys.LaunchMail},
{181, Keys.SelectMedia},
{182, Keys.LaunchApplication1},
{183, Keys.LaunchApplication2},
{186, Keys.SemiColon},
{186, Keys.SemiColon},
{187, Keys.Plus},
{188, Keys.Comma},
{189, Keys.Minus},
{190, Keys.Period},
{191, Keys.QuestionMark},
{191, Keys.QuestionMark},
{192, Keys.OemTilde},
{192, Keys.OemTilde},
{219, Keys.OpenBracket},
{219, Keys.OpenBracket},
{220, Keys.OemPipe},
{220, Keys.OemPipe},
{221, Keys.CloseBracket},
{221, Keys.CloseBracket},
{222, Keys.Quote},
{222, Keys.Quote},
{226, Keys.Backslash},
{226, Keys.Backslash},
{250, Keys.Play},
{251, Keys.Zoom},
{254, Keys.Clear}
};
public KeyboardKey(Keys key)
{
this.key = key;
}
public int win32Key { get; protected set; }
public int winInputKey { get; protected set; }
public int winFormKey { get; protected set; }
public string jsKey { get; protected set; }
public Keys key { get; }
public KeySource keySource { get; protected set; } = KeySource.Internal;
public string keyName => key.ToString();
public int keyCode => (int) key;
public static KeyboardKey FromJs(string key) =>
JsToKeys.ContainsKey(key) ? new KeyboardKey(JsToKeys[key]) : new KeyboardKey(Keys.Unknown) {jsKey = key, keySource = KeySource.JavaScript};
public static KeyboardKey FromWin32(int key) => Win32ToKey.ContainsKey(key)
? new KeyboardKey(Win32ToKey[key])
: new KeyboardKey(Keys.Unknown) {win32Key = key, keySource = KeySource.Win32};
public static KeyboardKey FromWinInput(int key) => WinInputToKey.ContainsKey(key)
? new KeyboardKey(WinInputToKey[key])
: new KeyboardKey(Keys.Unknown) {winInputKey = key, keySource = KeySource.WinInput};
public static KeyboardKey FromWinForm(int key) => WinFormToKey.ContainsKey(key)
? new KeyboardKey(WinFormToKey[key])
: new KeyboardKey(Keys.Unknown) {winFormKey = key, keySource = KeySource.WinForm};
public int ToWin32Key() => KeyToValues[key][2];
public int ToWinInputKey() => KeyToValues[key][0];
public int ToWinFormKey() => KeyToValues[key][1];
public string ToJavaScriptKey() => KeyToJsValues[key];
public override string ToString() => keyName;
public bool Equals(KeyboardKey other)
{
if (ReferenceEquals(null, other))
return false;
if (ReferenceEquals(this, other))
return true;
return key == other.key;
}
public override bool Equals(object obj) => ReferenceEquals(this, obj) || obj is KeyboardKey other && Equals(other);
public override int GetHashCode() => keyCode;
public static bool operator ==(KeyboardKey left, KeyboardKey right) => Equals(left, right);
public static bool operator !=(KeyboardKey left, KeyboardKey right) => !Equals(left, right);
}
@liukuo362573
Copy link

{0x2C, Keys.PrintScreen},
{0x2C, Keys.PrintScreen},
seems repeat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment