109 lines
2.0 KiB
Go
109 lines
2.0 KiB
Go
package input
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
var ErrBadKey = errors.New("unknown key")
|
|
|
|
// vkNames maps API key names to Windows virtual-key codes.
|
|
var vkNames = map[string]uint16{
|
|
"backspace": 0x08,
|
|
"tab": 0x09,
|
|
"enter": 0x0D,
|
|
"shift": 0xA0,
|
|
"ctrl": 0xA2,
|
|
"control": 0xA2,
|
|
"alt": 0xA4,
|
|
"pause": 0x13,
|
|
"capslock": 0x14,
|
|
"escape": 0x1B,
|
|
"esc": 0x1B,
|
|
"space": 0x20,
|
|
"pageup": 0x21,
|
|
"pagedown": 0x22,
|
|
"end": 0x23,
|
|
"home": 0x24,
|
|
"left": 0x25,
|
|
"up": 0x26,
|
|
"right": 0x27,
|
|
"down": 0x28,
|
|
"insert": 0x2D,
|
|
"delete": 0x2E,
|
|
"del": 0x2E,
|
|
"win": 0x5B,
|
|
"lwin": 0x5B,
|
|
"rwin": 0x5C,
|
|
"0": 0x30,
|
|
"1": 0x31,
|
|
"2": 0x32,
|
|
"3": 0x33,
|
|
"4": 0x34,
|
|
"5": 0x35,
|
|
"6": 0x36,
|
|
"7": 0x37,
|
|
"8": 0x38,
|
|
"9": 0x39,
|
|
"a": 0x41,
|
|
"b": 0x42,
|
|
"c": 0x43,
|
|
"d": 0x44,
|
|
"e": 0x45,
|
|
"f": 0x46,
|
|
"g": 0x47,
|
|
"h": 0x48,
|
|
"i": 0x49,
|
|
"j": 0x4A,
|
|
"k": 0x4B,
|
|
"l": 0x4C,
|
|
"m": 0x4D,
|
|
"n": 0x4E,
|
|
"o": 0x4F,
|
|
"p": 0x50,
|
|
"q": 0x51,
|
|
"r": 0x52,
|
|
"s": 0x53,
|
|
"t": 0x54,
|
|
"u": 0x55,
|
|
"v": 0x56,
|
|
"w": 0x57,
|
|
"x": 0x58,
|
|
"y": 0x59,
|
|
"z": 0x5A,
|
|
"f1": 0x70,
|
|
"f2": 0x71,
|
|
"f3": 0x72,
|
|
"f4": 0x73,
|
|
"f5": 0x74,
|
|
"f6": 0x75,
|
|
"f7": 0x76,
|
|
"f8": 0x77,
|
|
"f9": 0x78,
|
|
"f10": 0x79,
|
|
"f11": 0x7A,
|
|
"f12": 0x7B,
|
|
";": 0xBA,
|
|
"=": 0xBB,
|
|
",": 0xBC,
|
|
"-": 0xBD,
|
|
".": 0xBE,
|
|
"/": 0xBF,
|
|
"`": 0xC0,
|
|
"[": 0xDB,
|
|
"\\": 0xDC,
|
|
"]": 0xDD,
|
|
"'": 0xDE,
|
|
}
|
|
|
|
func vkCode(name string) (uint16, bool) {
|
|
key := strings.ToLower(strings.TrimSpace(name))
|
|
if len(key) == 1 {
|
|
if vk, ok := vkNames[key]; ok {
|
|
return vk, true
|
|
}
|
|
}
|
|
vk, ok := vkNames[key]
|
|
return vk, ok
|
|
}
|