Last active
May 10, 2024 23:49
-
-
Save aurimasniekis/f4cfcd834c8563d16ffc6f0a2a50a742 to your computer and use it in GitHub Desktop.
Revisions
-
aurimasniekis revised this gist
Jun 5, 2021 . 1 changed file with 1 addition and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -280,6 +280,7 @@ public enum KeySource 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); -
aurimasniekis revised this gist
Jun 5, 2021 . 1 changed file with 322 additions and 310 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -5,152 +5,156 @@ 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 @@ -162,152 +166,154 @@ public enum KeySource 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 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() { @@ -372,6 +378,7 @@ public enum KeySource {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}}, @@ -418,10 +425,13 @@ public enum KeySource {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}}, @@ -458,6 +468,8 @@ public enum KeySource {Keys.Zoom, new[] {168, 251, 0xFB}} }; public static KeyboardKey Unknown = new(Keys.Unknown); private static readonly Dictionary<Keys, string> KeyToJsValues = new() { {Keys.None, "Unidentified"}, @@ -521,6 +533,7 @@ public enum KeySource {Keys.X, "x"}, {Keys.Y, "y"}, {Keys.Z, "z"}, {Keys.Meta, "Meta"}, {Keys.LeftMeta, "Meta"}, {Keys.RightMeta, "Meta"}, {Keys.Apps, "AppSwitch"}, @@ -567,10 +580,13 @@ public enum KeySource {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"}, @@ -670,8 +686,7 @@ public enum KeySource {"x", Keys.X}, {"y", Keys.Y}, {"z", Keys.Z}, {"Meta", Keys.Meta}, {"AppSwitch", Keys.Apps}, {"Standby", Keys.Sleep}, {"0", Keys.NumPad0}, @@ -716,12 +731,9 @@ public enum KeySource {"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}, @@ -872,8 +884,8 @@ public enum KeySource {0x91, Keys.ScrollLock}, {0xA0, Keys.LeftShift}, {0xA1, Keys.RightShift}, {0xA2, Keys.LeftControl}, {0xA3, Keys.RightControl}, {0xA4, Keys.LeftAlt}, {0xA5, Keys.RightAlt}, {0xA6, Keys.BrowserBack}, @@ -1035,8 +1047,8 @@ public enum KeySource {115, Keys.ScrollLock}, {116, Keys.LeftShift}, {117, Keys.RightShift}, {118, Keys.LeftControl}, {119, Keys.RightControl}, {120, Keys.LeftAlt}, {121, Keys.RightAlt}, {122, Keys.BrowserBack}, @@ -1198,8 +1210,8 @@ public enum KeySource {145, Keys.ScrollLock}, {160, Keys.LeftShift}, {161, Keys.RightShift}, {162, Keys.LeftControl}, {163, Keys.RightControl}, {164, Keys.LeftAlt}, {165, Keys.RightAlt}, {166, Keys.BrowserBack}, -
aurimasniekis created this gist
Jun 5, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,1302 @@ using System; using System.Collections.Generic; public class KeyboardKey : IEquatable<KeyboardKey> { public enum Keys { None = 0, Cancel = 1, Backspace = 2, Tab = 3, Clear = 4, Enter = 5, Pause = 6, CapsLock = 7, Escape = 8, Space = 9, PageUp = 10, PageDown = 11, End = 12, Home = 13, ArrowLeft = 14, ArrowUp = 15, ArrowRight = 16, ArrowDown = 17, Select = 18, Print = 19, Execute = 20, PrintScreen = 21, Insert = 22, Delete = 23, Help = 24, D0 = 25, D1 = 26, D2 = 27, D3 = 28, D4 = 29, D5 = 30, D6 = 31, D7 = 32, D8 = 33, D9 = 34, A = 35, B = 36, C = 37, D = 38, E = 39, F = 40, G = 41, H = 42, I = 43, J = 44, K = 45, L = 46, M = 47, N = 48, O = 49, P = 50, Q = 51, R = 52, S = 53, T = 54, U = 55, V = 56, W = 57, X = 58, Y = 59, Z = 60, LeftMeta = 61, RightMeta = 62, Apps = 63, Sleep = 64, NumPad0 = 65, NumPad1 = 66, NumPad2 = 67, NumPad3 = 68, NumPad4 = 69, NumPad5 = 70, NumPad6 = 71, NumPad7 = 72, NumPad8 = 73, NumPad9 = 74, Multiply = 75, Add = 76, Separator = 77, Subtract = 78, Decimal = 79, Divide = 80, F1 = 81, F2 = 82, F3 = 83, F4 = 84, F5 = 85, F6 = 86, F7 = 87, F8 = 88, F9 = 89, F10 = 90, F11 = 91, F12 = 92, F13 = 93, F14 = 94, F15 = 95, F16 = 96, F17 = 97, F18 = 98, F19 = 99, F20 = 100, F21 = 101, F22 = 102, F23 = 103, F24 = 104, NumLock = 105, ScrollLock = 106, LeftShift = 107, RightShift = 108, LeftCtrl = 109, RightCtrl = 110, LeftAlt = 111, RightAlt = 112, BrowserBack = 113, BrowserForward = 114, BrowserRefresh = 115, BrowserStop = 116, BrowserSearch = 117, BrowserFavorites = 118, BrowserHome = 119, VolumeMute = 120, VolumeDown = 121, VolumeUp = 122, MediaNextTrack = 123, MediaPreviousTrack = 124, MediaStop = 125, MediaPlayPause = 126, LaunchMail = 127, SelectMedia = 128, LaunchApplication1 = 129, LaunchApplication2 = 130, SemiColon = 131, Plus = 132, Comma = 133, Minus = 134, Period = 135, QuestionMark = 136, OemTilde = 137, OpenBracket = 138, OemPipe = 139, CloseBracket = 140, Quote = 141, Backslash = 142, Play = 143, Zoom = 144, Unknown = 145 } public enum KeySource { Internal, Win32, WinInput, WinForm, JavaScript } public static KeyboardKey None = new(Keys.None); public static KeyboardKey Cancel = new(Keys.Cancel); public static KeyboardKey Backspace = new(Keys.Backspace); public static KeyboardKey Tab = new(Keys.Tab); public static KeyboardKey Clear = new(Keys.Clear); public static KeyboardKey Enter = new(Keys.Enter); public static KeyboardKey Pause = new(Keys.Pause); public static KeyboardKey CapsLock = new(Keys.CapsLock); public static KeyboardKey Escape = new(Keys.Escape); public static KeyboardKey Space = new(Keys.Space); public static KeyboardKey PageUp = new(Keys.PageUp); public static KeyboardKey PageDown = new(Keys.PageDown); public static KeyboardKey End = new(Keys.End); public static KeyboardKey Home = new(Keys.Home); public static KeyboardKey ArrowLeft = new(Keys.ArrowLeft); public static KeyboardKey ArrowUp = new(Keys.ArrowUp); public static KeyboardKey ArrowRight = new(Keys.ArrowRight); public static KeyboardKey ArrowDown = new(Keys.ArrowDown); public static KeyboardKey Select = new(Keys.Select); public static KeyboardKey Print = new(Keys.Print); public static KeyboardKey Execute = new(Keys.Execute); public static KeyboardKey PrintScreen = new(Keys.PrintScreen); public static KeyboardKey Insert = new(Keys.Insert); public static KeyboardKey Delete = new(Keys.Delete); public static KeyboardKey Help = new(Keys.Help); public static KeyboardKey D0 = new(Keys.D0); public static KeyboardKey D1 = new(Keys.D1); public static KeyboardKey D2 = new(Keys.D2); public static KeyboardKey D3 = new(Keys.D3); public static KeyboardKey D4 = new(Keys.D4); public static KeyboardKey D5 = new(Keys.D5); public static KeyboardKey D6 = new(Keys.D6); public static KeyboardKey D7 = new(Keys.D7); public static KeyboardKey D8 = new(Keys.D8); public static KeyboardKey D9 = new(Keys.D9); public static KeyboardKey A = new(Keys.A); public static KeyboardKey B = new(Keys.B); public static KeyboardKey C = new(Keys.C); public static KeyboardKey D = new(Keys.D); public static KeyboardKey E = new(Keys.E); public static KeyboardKey F = new(Keys.F); public static KeyboardKey G = new(Keys.G); public static KeyboardKey H = new(Keys.H); public static KeyboardKey I = new(Keys.I); public static KeyboardKey J = new(Keys.J); public static KeyboardKey K = new(Keys.K); public static KeyboardKey L = new(Keys.L); public static KeyboardKey M = new(Keys.M); public static KeyboardKey N = new(Keys.N); public static KeyboardKey O = new(Keys.O); public static KeyboardKey P = new(Keys.P); public static KeyboardKey Q = new(Keys.Q); public static KeyboardKey R = new(Keys.R); public static KeyboardKey S = new(Keys.S); public static KeyboardKey T = new(Keys.T); public static KeyboardKey U = new(Keys.U); public static KeyboardKey V = new(Keys.V); public static KeyboardKey W = new(Keys.W); public static KeyboardKey X = new(Keys.X); public static KeyboardKey Y = new(Keys.Y); public static KeyboardKey Z = new(Keys.Z); public static KeyboardKey LeftMeta = new(Keys.LeftMeta); public static KeyboardKey RightMeta = new(Keys.RightMeta); public static KeyboardKey Apps = new(Keys.Apps); public static KeyboardKey Sleep = new(Keys.Sleep); public static KeyboardKey NumPad0 = new(Keys.NumPad0); public static KeyboardKey NumPad1 = new(Keys.NumPad1); public static KeyboardKey NumPad2 = new(Keys.NumPad2); public static KeyboardKey NumPad3 = new(Keys.NumPad3); public static KeyboardKey NumPad4 = new(Keys.NumPad4); public static KeyboardKey NumPad5 = new(Keys.NumPad5); public static KeyboardKey NumPad6 = new(Keys.NumPad6); public static KeyboardKey NumPad7 = new(Keys.NumPad7); public static KeyboardKey NumPad8 = new(Keys.NumPad8); public static KeyboardKey NumPad9 = new(Keys.NumPad9); public static KeyboardKey Multiply = new(Keys.Multiply); public static KeyboardKey Add = new(Keys.Add); public static KeyboardKey Separator = new(Keys.Separator); public static KeyboardKey Subtract = new(Keys.Subtract); public static KeyboardKey Decimal = new(Keys.Decimal); public static KeyboardKey Divide = new(Keys.Divide); public static KeyboardKey F1 = new(Keys.F1); public static KeyboardKey F2 = new(Keys.F2); public static KeyboardKey F3 = new(Keys.F3); public static KeyboardKey F4 = new(Keys.F4); public static KeyboardKey F5 = new(Keys.F5); public static KeyboardKey F6 = new(Keys.F6); public static KeyboardKey F7 = new(Keys.F7); public static KeyboardKey F8 = new(Keys.F8); public static KeyboardKey F9 = new(Keys.F9); public static KeyboardKey F10 = new(Keys.F10); public static KeyboardKey F11 = new(Keys.F11); public static KeyboardKey F12 = new(Keys.F12); public static KeyboardKey F13 = new(Keys.F13); public static KeyboardKey F14 = new(Keys.F14); public static KeyboardKey F15 = new(Keys.F15); public static KeyboardKey F16 = new(Keys.F16); public static KeyboardKey F17 = new(Keys.F17); public static KeyboardKey F18 = new(Keys.F18); public static KeyboardKey F19 = new(Keys.F19); public static KeyboardKey F20 = new(Keys.F20); public static KeyboardKey F21 = new(Keys.F21); public static KeyboardKey F22 = new(Keys.F22); public static KeyboardKey F23 = new(Keys.F23); public static KeyboardKey F24 = new(Keys.F24); public static KeyboardKey NumLock = new(Keys.NumLock); public static KeyboardKey ScrollLock = new(Keys.ScrollLock); public static KeyboardKey LeftShift = new(Keys.LeftShift); public static KeyboardKey RightShift = new(Keys.RightShift); public static KeyboardKey LeftCtrl = new(Keys.LeftCtrl); public static KeyboardKey RightCtrl = new(Keys.RightCtrl); public static KeyboardKey LeftAlt = new(Keys.LeftAlt); public static KeyboardKey RightAlt = new(Keys.RightAlt); public static KeyboardKey BrowserBack = new(Keys.BrowserBack); public static KeyboardKey BrowserForward = new(Keys.BrowserForward); public static KeyboardKey BrowserRefresh = new(Keys.BrowserRefresh); public static KeyboardKey BrowserStop = new(Keys.BrowserStop); public static KeyboardKey BrowserSearch = new(Keys.BrowserSearch); public static KeyboardKey BrowserFavorites = new(Keys.BrowserFavorites); public static KeyboardKey BrowserHome = new(Keys.BrowserHome); public static KeyboardKey VolumeMute = new(Keys.VolumeMute); public static KeyboardKey VolumeDown = new(Keys.VolumeDown); public static KeyboardKey VolumeUp = new(Keys.VolumeUp); public static KeyboardKey MediaNextTrack = new(Keys.MediaNextTrack); public static KeyboardKey MediaPreviousTrack = new(Keys.MediaPreviousTrack); public static KeyboardKey MediaStop = new(Keys.MediaStop); public static KeyboardKey MediaPlayPause = new(Keys.MediaPlayPause); public static KeyboardKey LaunchMail = new(Keys.LaunchMail); public static KeyboardKey SelectMedia = new(Keys.SelectMedia); public static KeyboardKey LaunchApplication1 = new(Keys.LaunchApplication1); public static KeyboardKey LaunchApplication2 = new(Keys.LaunchApplication2); public static KeyboardKey SemiColon = new(Keys.SemiColon); public static KeyboardKey Plus = new(Keys.Plus); public static KeyboardKey Comma = new(Keys.Comma); public static KeyboardKey Minus = new(Keys.Minus); public static KeyboardKey Period = new(Keys.Period); public static KeyboardKey QuestionMark = new(Keys.QuestionMark); public static KeyboardKey OemTilde = new(Keys.OemTilde); public static KeyboardKey OpenBracket = new(Keys.OpenBracket); public static KeyboardKey OemPipe = new(Keys.OemPipe); public static KeyboardKey CloseBracket = new(Keys.CloseBracket); public static KeyboardKey Quote = new(Keys.Quote); public static KeyboardKey Backslash = new(Keys.Backslash); public static KeyboardKey Play = new(Keys.Play); public static KeyboardKey Zoom = new(Keys.Zoom); public static KeyboardKey Unknown = new(Keys.Unknown); 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.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.LeftShift, new[] {116, 160, 0xA0}}, {Keys.RightShift, new[] {117, 161, 0xA1}}, {Keys.LeftCtrl, new[] {118, 162, 0xA2}}, {Keys.RightCtrl, new[] {119, 163, 0xA3}}, {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}} }; 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.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.LeftShift, "Shift"}, {Keys.RightShift, "Shift"}, {Keys.LeftCtrl, "Control"}, {Keys.RightCtrl, "Control"}, {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.LeftMeta}, {"Meta", Keys.RightMeta}, {"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.LeftShift}, {"Shift", Keys.RightShift}, {"Control", Keys.LeftCtrl}, {"Control", Keys.RightCtrl}, {"Alt", Keys.LeftAlt}, {"Alt", Keys.RightAlt}, {"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.LeftCtrl}, {0xA3, Keys.RightCtrl}, {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.LeftCtrl}, {119, Keys.RightCtrl}, {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.LeftCtrl}, {163, Keys.RightCtrl}, {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); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,68 @@ # 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 * [Win32 Virtual-Key Codes](https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes) * [System.Windows.Input.Key](https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.key) * [System.Windows.Forms.Keys](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.keys) * [DOM Javascript KeyboardEvent.key according MDN specs](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) ## Usage ```csharp // 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.