namespace anjianjingling.Common { /// /// 键名 → 虚拟键码(VK)映射。 /// public static class VirtualKeys { private static readonly Dictionary Map = new(StringComparer.OrdinalIgnoreCase) { ["ENTER"] = 0x0D, ["RETURN"] = 0x0D, ["ESC"] = 0x1B, ["ESCAPE"] = 0x1B, ["SPACE"] = 0x20, ["TAB"] = 0x09, ["BACKSPACE"] = 0x08, ["BACK"] = 0x08, ["DELETE"] = 0x2E, ["DEL"] = 0x2E, ["INSERT"] = 0x2D, ["INS"] = 0x2D, ["HOME"] = 0x24, ["END"] = 0x23, ["PAGEUP"] = 0x21, ["PGUP"] = 0x21, ["PAGEDOWN"] = 0x22, ["PGDN"] = 0x22, ["LEFT"] = 0x25, ["UP"] = 0x26, ["RIGHT"] = 0x27, ["DOWN"] = 0x28, ["CAPSLOCK"] = 0x14, ["NUMLOCK"] = 0x90, ["SCROLLLOCK"] = 0x91, ["CTRL"] = 0x11, ["CONTROL"] = 0x11, ["ALT"] = 0x12, ["MENU"] = 0x12, ["SHIFT"] = 0x10, ["WIN"] = 0x5B, ["LWIN"] = 0x5B, ["F1"] = 0x70, ["F2"] = 0x71, ["F3"] = 0x72, ["F4"] = 0x73, ["F5"] = 0x74, ["F6"] = 0x75, ["F7"] = 0x76, ["F8"] = 0x77, ["F9"] = 0x78, ["F10"] = 0x79, ["F11"] = 0x7A, ["F12"] = 0x7B, ["NUMPAD0"] = 0x60, ["NUMPAD1"] = 0x61, ["NUMPAD2"] = 0x62, ["NUMPAD3"] = 0x63, ["NUMPAD4"] = 0x64, ["NUMPAD5"] = 0x65, ["NUMPAD6"] = 0x66, ["NUMPAD7"] = 0x67, ["NUMPAD8"] = 0x68, ["NUMPAD9"] = 0x69, ["MULTIPLY"] = 0x6A, ["ADD"] = 0x6B, ["SUBTRACT"] = 0x6D, ["DECIMAL"] = 0x6E, ["DIVIDE"] = 0x6F, ["OEM_1"] = 0xBA, ["SEMICOLON"] = 0xBA, // ; ["OEM_PLUS"] = 0xBB, ["EQUAL"] = 0xBB, // = ["OEM_COMMA"] = 0xBC, ["COMMA"] = 0xBC, // , ["OEM_MINUS"] = 0xBD, ["MINUS"] = 0xBD, // - ["OEM_PERIOD"] = 0xBE, ["PERIOD"] = 0xBE, // . ["OEM_2"] = 0xBF, ["SLASH"] = 0xBF, // / ["OEM_3"] = 0xC0, ["BACKQUOTE"] = 0xC0, // ` ["OEM_4"] = 0xDB, ["LBRACKET"] = 0xDB, // [ ["OEM_5"] = 0xDC, ["BACKSLASH"] = 0xDC, // \ ["OEM_6"] = 0xDD, ["RBRACKET"] = 0xDD, // ] ["OEM_7"] = 0xDE, ["QUOTE"] = 0xDE, // ' }; static VirtualKeys() { for (char c = 'A'; c <= 'Z'; c++) Map[c.ToString()] = (ushort)c; for (char c = '0'; c <= '9'; c++) Map[c.ToString()] = (ushort)c; } /// 尝试解析键名,返回 VK 码;单字符直接按字符 VK 处理。 public static ushort? Resolve(string name) { name = name.Trim(); if (name.Length == 0) return null; if (Map.TryGetValue(name, out var vk)) return vk; if (name.Length == 1) { char c = char.ToUpperInvariant(name[0]); if (c >= 'A' && c <= 'Z') return (ushort)c; if (c >= '0' && c <= '9') return (ushort)c; } return null; } /// 是否为扩展键(方向键、Insert/Delete 等)。 public static bool IsExtended(ushort vk) => vk is >= 0x21 and <= 0x28 or 0x2D or 0x2E or 0x5B or 0x5C or 0x6F or 0x90; } }