diff --git a/Dalamud/Game/ClientState/KeyState.cs b/Dalamud/Game/ClientState/Keys/KeyState.cs similarity index 87% rename from Dalamud/Game/ClientState/KeyState.cs rename to Dalamud/Game/ClientState/Keys/KeyState.cs index e17d2cf50..b9d21ef2e 100644 --- a/Dalamud/Game/ClientState/KeyState.cs +++ b/Dalamud/Game/ClientState/Keys/KeyState.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; using Serilog; -namespace Dalamud.Game.ClientState +namespace Dalamud.Game.ClientState.Keys { /// /// Wrapper around the game keystate buffer, which contains the pressed state for all keyboard keys, indexed by virtual vkCode. @@ -52,6 +52,13 @@ namespace Dalamud.Game.ClientState } } + /// + /// Get or set the keypressed state for a given VirtualKey enum. + /// + /// The virtual key to change. + /// Whether the specified key is currently pressed. + public bool this[VirtualKey vk] => this[(int)vk]; + /// /// Clears the pressed state for all keys. /// diff --git a/Dalamud/Game/ClientState/Keys/VirtualKey.cs b/Dalamud/Game/ClientState/Keys/VirtualKey.cs new file mode 100644 index 000000000..ab9436822 --- /dev/null +++ b/Dalamud/Game/ClientState/Keys/VirtualKey.cs @@ -0,0 +1,1044 @@ +namespace Dalamud.Game.ClientState.Keys +{ + /// + /// Virtual-key codes. + /// + /// + /// Defined in winuser.h from Windows SDK v6.1. + /// + public enum VirtualKey : ushort + { + /// + /// This is an addendum to use on functions in which you have to pass a zero value to represent no key code. + /// + NO_KEY = 0, + + /// + /// Left mouse button. + /// + LBUTTON = 1, + + /// + /// Right mouse button. + /// + RBUTTON = 2, + + /// + /// Control-break processing. + /// + CANCEL = 3, + + /// + /// Middle mouse button (three-button mouse). + /// + /// + /// NOT contiguous with L and R buttons. + /// + MBUTTON = 4, + + /// + /// X1 mouse button. + /// + /// + /// NOT contiguous with L and R buttons. + /// + XBUTTON1 = 5, + + /// + /// X2 mouse button. + /// + /// + /// NOT contiguous with L and R buttons. + /// + XBUTTON2 = 6, + + /// + /// BACKSPACE key. + /// + BACK = 8, + + /// + /// TAB key. + /// + TAB = 9, + + /// + /// CLEAR key. + /// + CLEAR = 12, + + /// + /// RETURN key. + /// + RETURN = 13, + + /// + /// SHIFT key. + /// + SHIFT = 16, + + /// + /// CONTROL key. + /// + CONTROL = 17, + + /// + /// ALT key. + /// + MENU = 18, + + /// + /// PAUSE key. + /// + PAUSE = 19, + + /// + /// CAPS LOCK key. + /// + CAPITAL = 20, + + /// + /// IME Kana mode. + /// + KANA = 21, + + /// + /// IME Hanguel mode (maintained for compatibility; use User32.VirtualKey.HANGUL). + /// + HANGEUL = KANA, + + /// + /// IME Hangul mode. + /// + HANGUL = KANA, + + /// + /// IME Junja mode. + /// + JUNJA = 23, + + /// + /// IME final mode. + /// + FINAL = 24, + + /// + /// IME Hanja mode. + /// + HANJA = 25, + + /// + /// IME Kanji mode. + /// + KANJI = HANJA, + + /// + /// ESC key. + /// + ESCAPE = 27, + + /// + /// IME convert. + /// + CONVERT = 28, + + /// + /// IME nonconvert. + /// + NONCONVERT = 29, + + /// + /// IME accept. + /// + ACCEPT = 30, + + /// + /// IME mode change request. + /// + MODECHANGE = 31, + + /// + /// SPACEBAR. + /// + SPACE = 32, + + /// + /// PAGE UP key. + /// + PRIOR = 33, + + /// + /// PAGE DOWN key. + /// + NEXT = 34, + + /// + /// END key. + /// + END = 35, + + /// + /// HOME key. + /// + HOME = 36, + + /// + /// LEFT ARROW key. + /// + LEFT = 37, + + /// + /// UP ARROW key. + /// + UP = 38, + + /// + /// RIGHT ARROW key. + /// + RIGHT = 39, + + /// + /// DOWN ARROW key. + /// + DOWN = 40, + + /// + /// SELECT key. + /// + SELECT = 41, + + /// + /// PRINT key. + /// + PRINT = 42, + + /// + /// EXECUTE key. + /// + EXECUTE = 43, + + /// + /// PRINT SCREEN key. + /// + SNAPSHOT = 44, + + /// + /// INS key. + /// + INSERT = 45, + + /// + /// DEL key. + /// + DELETE = 46, + + /// + /// HELP key. + /// + HELP = 47, + + /// + /// 0 key. + /// + KEY_0 = 48, + + /// + /// 1 key. + /// + KEY_1 = 49, + + /// + /// 2 key. + /// + KEY_2 = 50, + + /// + /// 3 key. + /// + KEY_3 = 51, + + /// + /// 4 key. + /// + KEY_4 = 52, + + /// + /// 5 key. + /// + KEY_5 = 53, + + /// + /// 6 key. + /// + KEY_6 = 54, + + /// + /// 7 key. + /// + KEY_7 = 55, + + /// + /// 8 key. + /// + KEY_8 = 56, + + /// + /// 9 key. + /// + KEY_9 = 57, + + /// + /// A key. + /// + A = 65, + + /// + /// B key. + /// + B = 66, + + /// + /// C key. + /// + C = 67, + + /// + /// D key. + /// + D = 68, + + /// + /// E key. + /// + E = 69, + + /// + /// F key. + /// + F = 70, + + /// + /// G key. + /// + G = 71, + + /// + /// H key. + /// + H = 72, + + /// + /// I key. + /// + I = 73, + + /// + /// J key. + /// + J = 74, + + /// + /// K key. + /// + K = 75, + + /// + /// L key. + /// + L = 76, + + /// + /// M key. + /// + M = 77, + + /// + /// N key. + /// + N = 78, + + /// + /// O key. + /// + O = 79, + + /// + /// P key. + /// + P = 80, + + /// + /// Q key. + /// + Q = 81, + + /// + /// R key. + /// + R = 82, + + /// + /// S key. + /// + S = 83, + + /// + /// T key. + /// + T = 84, + + /// + /// U key. + /// + U = 85, + + /// + /// V key. + /// + V = 86, + + /// + /// W key. + /// + W = 87, + + /// + /// X key. + /// + X = 88, + + /// + /// Y key. + /// + Y = 89, + + /// + /// Z key. + /// + Z = 90, + + /// + /// Left Windows key (Natural keyboard). + /// + LWIN = 91, + + /// + /// Right Windows key (Natural keyboard). + /// + RWIN = 92, + + /// + /// Applications key (Natural keyboard). + /// + APPS = 93, + + /// + /// Computer Sleep key. + /// + SLEEP = 95, + + /// + /// Numeric keypad 0 key. + /// + NUMPAD0 = 96, + + /// + /// Numeric keypad 1 key. + /// + NUMPAD1 = 97, + + /// + /// Numeric keypad 2 key. + /// + NUMPAD2 = 98, + + /// + /// Numeric keypad 3 key. + /// + NUMPAD3 = 99, + + /// + /// Numeric keypad 4 key. + /// + NUMPAD4 = 100, + + /// + /// Numeric keypad 5 key. + /// + NUMPAD5 = 101, + + /// + /// Numeric keypad 6 key. + /// + NUMPAD6 = 102, + + /// + /// Numeric keypad 7 key. + /// + NUMPAD7 = 103, + + /// + /// Numeric keypad 8 key. + /// + NUMPAD8 = 104, + + /// + /// Numeric keypad 9 key. + /// + NUMPAD9 = 105, + + /// + /// Multiply key. + /// + MULTIPLY = 106, + + /// + /// Add key. + /// + ADD = 107, + + /// + /// Separator key. + /// + SEPARATOR = 108, + + /// + /// Subtract key. + /// + SUBTRACT = 109, + + /// + /// Decimal key. + /// + DECIMAL = 110, + + /// + /// Divide key. + /// + DIVIDE = 111, + + /// + /// F1 Key. + /// + F1 = 112, + + /// + /// F2 Key. + /// + F2 = 113, + + /// + /// F3 Key. + /// + F3 = 114, + + /// + /// F4 Key. + /// + F4 = 115, + + /// + /// F5 Key. + /// + F5 = 116, + + /// + /// F6 Key. + /// + F6 = 117, + + /// + /// F7 Key. + /// + F7 = 118, + + /// + /// F8 Key. + /// + F8 = 119, + + /// + /// F9 Key. + /// + F9 = 120, + + /// + /// F10 Key. + /// + F10 = 121, + + /// + /// F11 Key. + /// + F11 = 122, + + /// + /// F12 Key. + /// + F12 = 123, + + /// + /// F13 Key. + /// + F13 = 124, + + /// + /// F14 Key. + /// + F14 = 125, + + /// + /// F15 Key. + /// + F15 = 126, + + /// + /// F16 Key. + /// + F16 = 127, + + /// + /// F17 Key. + /// + F17 = 128, + + /// + /// F18 Key. + /// + F18 = 129, + + /// + /// F19 Key. + /// + F19 = 130, + + /// + /// F20 Key. + /// + F20 = 131, + + /// + /// F21 Key. + /// + F21 = 132, + + /// + /// F22 Key. + /// + F22 = 133, + + /// + /// F23 Key. + /// + F23 = 134, + + /// + /// F24 Key. + /// + F24 = 135, + + /// + /// NUM LOCK key. + /// + NUMLOCK = 144, + + /// + /// SCROLL LOCK key. + /// + SCROLL = 145, + + /// + /// '=' key on numpad (NEC PC-9800 kbd definitions). + /// + OEM_NEC_EQUAL = 146, + + /// + /// 'Dictionary' key (Fujitsu/OASYS kbd definitions). + /// + OEM_FJ_JISHO = OEM_NEC_EQUAL, + + /// + /// 'Unregister word' key (Fujitsu/OASYS kbd definitions). + /// + OEM_FJ_MASSHOU = 147, + + /// + /// 'Register word' key (Fujitsu/OASYS kbd definitions). + /// + OEM_FJ_TOUROKU = 148, + + /// + /// 'Left OYAYUBI' key (Fujitsu/OASYS kbd definitions). + /// + OEM_FJ_LOYA = 149, + + /// + /// 'Right OYAYUBI' key (Fujitsu/OASYS kbd definitions). + /// + OEM_FJ_ROYA = 150, + + /// + /// Left SHIFT key. + /// + /// + /// Used only as parameters to User32.GetAsyncKeyState and User32.GetKeyState. No other API or message will distinguish left and right keys in this way. + /// + LSHIFT = 160, + + /// + /// Right SHIFT key. + /// + RSHIFT = 161, + + /// + /// Left CONTROL key. + /// + LCONTROL = 162, + + /// + /// Right CONTROL key. + /// + RCONTROL = 163, + + /// + /// Left MENU key. + /// + LMENU = 164, + + /// + /// Right MENU key. + /// + RMENU = 165, + + /// + /// Browser Back key. + /// + BROWSER_BACK = 166, + + /// + /// Browser Forward key. + /// + BROWSER_FORWARD = 167, + + /// + /// Browser Refresh key. + /// + BROWSER_REFRESH = 168, + + /// + /// Browser Stop key. + /// + BROWSER_STOP = 169, + + /// + /// Browser Search key. + /// + BROWSER_SEARCH = 170, + + /// + /// Browser Favorites key. + /// + BROWSER_FAVORITES = 171, + + /// + /// Browser Start and Home key. + /// + BROWSER_HOME = 172, + + /// + /// Volume Mute key. + /// + VOLUME_MUTE = 173, + + /// + /// Volume Down key. + /// + VOLUME_DOWN = 174, + + /// + /// Volume Up key. + /// + VOLUME_UP = 175, + + /// + /// Next Track key. + /// + MEDIA_NEXT_TRACK = 176, + + /// + /// Previous Track key. + /// + MEDIA_PREV_TRACK = 177, + + /// + /// Stop Media key. + /// + MEDIA_STOP = 178, + + /// + /// Play/Pause Media key. + /// + MEDIA_PLAY_PAUSE = 179, + + /// + /// Start Mail key. + /// + LAUNCH_MAIL = 180, + + /// + /// Select Media key. + /// + LAUNCH_MEDIA_SELECT = 181, + + /// + /// Start Application 1 key. + /// + LAUNCH_APP1 = 182, + + /// + /// Start Application 2 key. + /// + LAUNCH_APP2 = 183, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the ';:' key. + /// + OEM_1 = 186, + + /// + /// For any country/region, the '+' key. + /// + OEM_PLUS = 187, + + /// + /// For any country/region, the ',' key. + /// + OEM_COMMA = 188, + + /// + /// For any country/region, the '-' key. + /// + OEM_MINUS = 189, + + /// + /// For any country/region, the '.' key. + /// + OEM_PERIOD = 190, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the '/?' key. + /// + OEM_2 = 191, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the '`~' key. + /// + OEM_3 = 192, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the '[{' key. + /// + OEM_4 = 219, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the '\|' key. + /// + OEM_5 = 220, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the ']}' key. + /// + OEM_6 = 221, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + /// + /// For the US standard keyboard, the 'single-quote/double-quote' (''"') key. + /// + OEM_7 = 222, + + /// + /// Used for miscellaneous characters; it can vary by keyboard.. + /// + OEM_8 = 223, + + /// + /// OEM specific. + /// + /// + /// 'AX' key on Japanese AX kbd. + /// + OEM_AX = 225, + + /// + /// Either the angle bracket ("<>") key or the backslash ("\|") key on the RT 102-key keyboard. + /// + OEM_102 = 226, + + /// + /// OEM specific. + /// + /// + /// Help key on ICO. + /// + ICO_HELP = 227, + + /// + /// OEM specific. + /// + /// + /// 00 key on ICO. + /// + ICO_00 = 228, + + /// + /// IME PROCESS key. + /// + PROCESSKEY = 229, + + /// + /// OEM specific. + /// + /// + /// Clear key on ICO. + /// + ICO_CLEAR = 230, + + /// + /// Used to pass Unicode characters as if they were keystrokes. The PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods.. + /// + /// + /// For more information, see Remark in User32.KEYBDINPUT, User32.SendInput, User32.WindowMessage.WM_KEYDOWN, and User32.WindowMessage.WM_KEYUP. + /// + PACKET = 231, + + /// + /// Nokia/Ericsson definition. + /// + OEM_RESET = 233, + + /// + /// Nokia/Ericsson definition. + /// + OEM_JUMP = 234, + + /// + /// Nokia/Ericsson definition. + /// + OEM_PA1 = 235, + + /// + /// Nokia/Ericsson definition. + /// + OEM_PA2 = 236, + + /// + /// Nokia/Ericsson definition. + /// + OEM_PA3 = 237, + + /// + /// Nokia/Ericsson definition. + /// + OEM_WSCTRL = 238, + + /// + /// Nokia/Ericsson definition. + /// + OEM_CUSEL = 239, + + /// + /// Nokia/Ericsson definition. + /// + OEM_ATTN = 240, + + /// + /// Nokia/Ericsson definition. + /// + OEM_FINISH = 241, + + /// + /// Nokia/Ericsson definition. + /// + OEM_COPY = 242, + + /// + /// Nokia/Ericsson definition. + /// + OEM_AUTO = 243, + + /// + /// Nokia/Ericsson definition. + /// + OEM_ENLW = 244, + + /// + /// Nokia/Ericsson definition. + /// + OEM_BACKTAB = 245, + + /// + /// Attn key. + /// + ATTN = 246, + + /// + /// CrSel key. + /// + CRSEL = 247, + + /// + /// ExSel key. + /// + EXSEL = 248, + + /// + /// Erase EOF key. + /// + EREOF = 249, + + /// + /// Play key. + /// + PLAY = 250, + + /// + /// Zoom key. + /// + ZOOM = 251, + + /// + /// Reserved constant by Windows headers definition. + /// + NONAME = 252, + + /// + /// PA1 key. + /// + PA1 = 253, + + /// + /// Clear key. + /// + OEM_CLEAR = 254, + } +}