class Key: def __init__(self, name, code, alt_name, shifted_name): self.name = name self.code = code self.alt_name = alt_name self.shifted_name = shifted_name def __str__(self): return self.name def is_mouse_button(key): return ((key.code) >= names["btn left"].code and (key.code) <= names["btn task"].code) or\ ((key.code) >= names["btn 0"].code and ( key.code) <= names["btn 9"].code) codes = { 1: Key("esc", 1, "escape", ""), 2: Key("1", 2, "", "!"), 3: Key("2", 3, "", "@"), 4: Key("3", 4, "", "#"), 5: Key("4", 5, "", "$"), 6: Key("5", 6, "", "%"), 7: Key("6", 7, "", "^"), 8: Key("7", 8, "", "&"), 9: Key("8", 9, "", "*"), 10: Key("9", 10, "", "("), 11: Key("0", 11, "", ")"), 12: Key("-", 12, "minus", "_"), 13: Key("=", 13, "equal", "+"), 14: Key("backspace", 14, "", ""), 15: Key("tab", 15, "", ""), 16: Key("q", 16, "", "Q"), 17: Key("w", 17, "", "W"), 18: Key("e", 18, "", "E"), 19: Key("r", 19, "", "R"), 20: Key("t", 20, "", "T"), 21: Key("y", 21, "", "Y"), 22: Key("u", 22, "", "U"), 23: Key("i", 23, "", "I"), 24: Key("o", 24, "", "O"), 25: Key("p", 25, "", "P"), 26: Key("[", 26, "leftbrace", "{"), 27: Key("]", 27, "rightbrace", "}"), 28: Key("enter", 28, "\n", ""), 29: Key("control", 29, "leftcontrol", ""), 30: Key("a", 30, "", "A"), 31: Key("s", 31, "", "S"), 32: Key("d", 32, "", "D"), 33: Key("f", 33, "", "F"), 34: Key("g", 34, "", "G"), 35: Key("h", 35, "", "H"), 36: Key("j", 36, "", "J"), 37: Key("k", 37, "", "K"), 38: Key("l", 38, "", "L"), 39: Key(";", 39, "semicolon", ":"), 40: Key("'", 40, "apostrophe", "\""), 41: Key("`", 41, "grave", "~"), 42: Key("shift", 42, "leftshift", ""), 43: Key("\\", 43, "backslash", " |"), 44: Key("z", 44, "", "Z"), 45: Key("x", 45, "", "X"), 46: Key("c", 46, "", "C"), 47: Key("v", 47, "", "V"), 48: Key("b", 48, "", "B"), 49: Key("n", 49, "", "N"), 50: Key("m", 50, "", "M"), 51: Key(",", 51, "comma", "<"), 52: Key(".", 52, "dot", ">"), 53: Key("/", 53, "slash", "?"), 54: Key("rightshift", 54, "", ""), 55: Key("kpasterisk", 55, "", ""), 56: Key("alt", 56, "leftalt", ""), 57: Key("space", 57, " ", ""), 58: Key("capslock", 58, "", ""), 59: Key("f1", 59, "", ""), 60: Key("f2", 60, "", ""), 61: Key("f3", 61, "", ""), 62: Key("f4", 62, "", ""), 63: Key("f5", 63, "", ""), 64: Key("f6", 64, "", ""), 65: Key("f7", 65, "", ""), 66: Key("f8", 66, "", ""), 67: Key("f9", 67, "", ""), 68: Key("f10", 68, "", ""), 69: Key("numlock", 69, "", ""), 70: Key("scrolllock", 70, "", ""), 71: Key("kp7", 71, "", ""), 72: Key("kp8", 72, "", ""), 73: Key("kp9", 73, "", ""), 74: Key("kpminus", 74, "", ""), 75: Key("kp4", 75, "", ""), 76: Key("kp5", 76, "", ""), 77: Key("kp6", 77, "", ""), 78: Key("kpplus", 78, "", ""), 79: Key("kp1", 79, "", ""), 80: Key("kp2", 80, "", ""), 81: Key("kp3", 81, "", ""), 82: Key("kp0", 82, "", ""), 83: Key("kpdot", 83, "", ""), 85: Key("zenkakuhankaku", 85, "", ""), 86: Key("102nd", 86, "", ""), 87: Key("f11", 87, "", ""), 88: Key("f12", 88, "", ""), 89: Key("ro", 89, "", ""), 90: Key("katakana", 90, "", ""), 91: Key("hiragana", 91, "", ""), 92: Key("henkan", 92, "", ""), 93: Key("katakanahiragana", 93, "", ""), 94: Key("muhenkan", 94, "", ""), 95: Key("kpjpcomma", 95, "", ""), 96: Key("kpenter", 96, "", ""), 97: Key("rightcontrol", 97, "", ""), 98: Key("kpslash", 98, "", ""), 99: Key("sysrq", 99, "", ""), 100: Key("rightalt", 100, "", ""), 101: Key("linefeed", 101, "", ""), 102: Key("home", 102, "", ""), 103: Key("up", 103, "", ""), 104: Key("pageup", 104, "", ""), 105: Key("left", 105, "", ""), 106: Key("right", 106, "", ""), 107: Key("end", 107, "", ""), 108: Key("down", 108, "", ""), 109: Key("pagedown", 109, "", ""), 110: Key("insert", 110, "", ""), 111: Key("delete", 111, "", ""), 112: Key("macro", 112, "", ""), 113: Key("mute", 113, "", ""), 114: Key("volumedown", 114, "", ""), 115: Key("volumeup", 115, "", ""), 116: Key("power", 116, "", ""), 117: Key("kpequal", 117, "", ""), 118: Key("kpplusminus", 118, "", ""), 119: Key("pause", 119, "", ""), 120: Key("scale", 120, "", ""), 121: Key("kpcomma", 121, "", ""), 122: Key("hangeul", 122, "", ""), 123: Key("hanja", 123, "", ""), 124: Key("yen", 124, "", ""), 125: Key("meta", 125, "leftmeta", ""), 126: Key("rightmeta", 126, "", ""), 127: Key("compose", 127, "", ""), 128: Key("stop", 128, "", ""), 129: Key("again", 129, "", ""), 130: Key("props", 130, "", ""), 131: Key("undo", 131, "", ""), 132: Key("front", 132, "", ""), 133: Key("copy", 133, "", ""), 134: Key("open", 134, "", ""), 135: Key("paste", 135, "", ""), 136: Key("find", 136, "", ""), 137: Key("cut", 137, "", ""), 138: Key("help", 138, "", ""), 139: Key("menu", 139, "", ""), 140: Key("calc", 140, "", ""), 141: Key("setup", 141, "", ""), 142: Key("sleep", 142, "", ""), 143: Key("wakeup", 143, "", ""), 144: Key("file", 144, "", ""), 145: Key("sendfile", 145, "", ""), 146: Key("deletefile", 146, "", ""), 147: Key("xfer", 147, "", ""), 148: Key("prog1", 148, "", ""), 149: Key("prog2", 149, "", ""), 150: Key("www", 150, "", ""), 151: Key("msdos", 151, "", ""), 152: Key("coffee", 152, "", ""), 153: Key("display", 153, "", ""), 154: Key("cyclewindows", 154, "", ""), 155: Key("mail", 155, "", ""), 156: Key("bookmarks", 156, "", ""), 157: Key("computer", 157, "", ""), 158: Key("back", 158, "", ""), 159: Key("forward", 159, "", ""), 160: Key("closecd", 160, "", ""), 161: Key("ejectcd", 161, "", ""), 162: Key("ejectclosecd", 162, "", ""), 163: Key("nextsong", 163, "", ""), 164: Key("playpause", 164, "", ""), 165: Key("previoussong", 165, "", ""), 166: Key("stopcd", 166, "", ""), 167: Key("record", 167, "", ""), 168: Key("rewind", 168, "", ""), 169: Key("phone", 169, "", ""), 170: Key("iso", 170, "", ""), 171: Key("config", 171, "", ""), 172: Key("homepage", 172, "", ""), 173: Key("refresh", 173, "", ""), 174: Key("exit", 174, "", ""), 175: Key("move", 175, "", ""), 176: Key("edit", 176, "", ""), 177: Key("scrollup", 177, "", ""), 178: Key("scrolldown", 178, "", ""), 179: Key("kpleftparen", 179, "", ""), 180: Key("kprightparen", 180, "", ""), 181: Key("new", 181, "", ""), 182: Key("redo", 182, "", ""), 183: Key("f13", 183, "", ""), 184: Key("f14", 184, "", ""), 185: Key("f15", 185, "", ""), 186: Key("f16", 186, "", ""), 187: Key("f17", 187, "", ""), 188: Key("f18", 188, "", ""), 189: Key("f19", 189, "", ""), 190: Key("f20", 190, "", ""), 191: Key("f21", 191, "", ""), 192: Key("f22", 192, "", ""), 193: Key("f23", 193, "", ""), 194: Key("f24", 194, "", ""), 200: Key("playcd", 200, "", ""), 201: Key("pausecd", 201, "", ""), 202: Key("prog3", 202, "", ""), 203: Key("prog4", 203, "", ""), 204: Key("dashboard", 204, "", ""), 205: Key("suspend", 205, "", ""), 206: Key("close", 206, "", ""), 207: Key("play", 207, "", ""), 208: Key("fastforward", 208, "", ""), 209: Key("bassboost", 209, "", ""), 210: Key("print", 210, "", ""), 211: Key("hp", 211, "", ""), 212: Key("camera", 212, "", ""), 213: Key("sound", 213, "", ""), 214: Key("question", 214, "", ""), 215: Key("email", 215, "", ""), 216: Key("chat", 216, "", ""), 217: Key("search", 217, "", ""), 218: Key("connect", 218, "", ""), 219: Key("finance", 219, "", ""), 220: Key("sport", 220, "", ""), 221: Key("shop", 221, "", ""), 222: Key("alterase", 222, "", ""), 223: Key("cancel", 223, "", ""), 224: Key("brightnessdown", 224, "", ""), 225: Key("brightnessup", 225, "", ""), 226: Key("media", 226, "", ""), 227: Key("switchvideomode", 227, "", ""), 228: Key("kbdillumtoggle", 228, "", ""), 229: Key("kbdillumdown", 229, "", ""), 230: Key("kbdillumup", 230, "", ""), 231: Key("send", 231, "", ""), 232: Key("reply", 232, "", ""), 233: Key("forwardmail", 233, "", ""), 234: Key("save", 234, "", ""), 235: Key("documents", 235, "", ""), 236: Key("battery", 236, "", ""), 237: Key("bluetooth", 237, "", ""), 238: Key("wlan", 238, "", ""), 239: Key("uwb", 239, "", ""), 240: Key("unknown", 240, "", ""), 241: Key("next", 241, "", ""), 242: Key("prev", 242, "", ""), 243: Key("cycle", 243, "", ""), 244: Key("auto", 244, "", ""), 245: Key("off", 245, "", ""), 246: Key("wwan", 246, "", ""), 247: Key("rfkill", 247, "", ""), 248: Key("micmute", 248, "", ""), 330: Key("btn dead", 330, "", ""), 325: Key("btn dead", 325, "", ""), 256: Key("btn 0", 256, "", ""), 257: Key("btn 1", 257, "", ""), 258: Key("btn 2", 258, "", ""), 259: Key("btn 3", 259, "", ""), 260: Key("btn 4", 260, "", ""), 261: Key("btn 5", 261, "", ""), 262: Key("btn 6", 262, "", ""), 263: Key("btn 7", 263, "", ""), 264: Key("btn 8", 264, "", ""), 265: Key("btn 9", 265, "", ""), 272: Key("btn left", 272, "", ""), 273: Key("btn right", 273, "", ""), 274: Key("btn middle", 274, "", ""), 275: Key("btn side", 275, "", ""), 276: Key("btn extra", 276, "", ""), 277: Key("btn forward", 277, "", ""), 278: Key("btn back", 278, "", ""), 279: Key("btn task", 279, "", ""), 352: Key("ok", 352, "", ""), 353: Key("select", 353, "", ""), 354: Key("goto", 354, "", ""), 355: Key("clear", 355, "", ""), 356: Key("power2", 356, "", ""), 357: Key("option", 357, "", ""), 358: Key("info", 358, "", ""), 359: Key("time", 359, "", ""), 360: Key("vendor", 360, "", ""), 361: Key("archive", 361, "", ""), 362: Key("program", 362, "", ""), 363: Key("channel", 363, "", ""), 364: Key("favorites", 364, "", ""), 365: Key("epg", 365, "", ""), 366: Key("pvr", 366, "", ""), 367: Key("mhp", 367, "", ""), 368: Key("language", 368, "", ""), 369: Key("title", 369, "", ""), 370: Key("subtitle", 370, "", ""), 371: Key("angle", 371, "", ""), 372: Key("zoom", 372, "", ""), 373: Key("mode", 373, "", ""), 374: Key("keyboard", 374, "", ""), 375: Key("screen", 375, "", ""), 376: Key("pc", 376, "", ""), 377: Key("tv", 377, "", ""), 378: Key("tv2", 378, "", ""), 379: Key("vcr", 379, "", ""), 380: Key("vcr2", 380, "", ""), 381: Key("sat", 381, "", ""), 382: Key("sat2", 382, "", ""), 383: Key("cd", 383, "", ""), 384: Key("tape", 384, "", ""), 385: Key("radio", 385, "", ""), 386: Key("tuner", 386, "", ""), 387: Key("player", 387, "", ""), 388: Key("text", 388, "", ""), 389: Key("dvd", 389, "", ""), 390: Key("aux", 390, "", ""), 391: Key("mp3", 391, "", ""), 392: Key("audio", 392, "", ""), 393: Key("video", 393, "", ""), 394: Key("directory", 394, "", ""), 395: Key("list", 395, "", ""), 396: Key("memo", 396, "", ""), 397: Key("calendar", 397, "", ""), 398: Key("red", 398, "", ""), 399: Key("green", 399, "", ""), 400: Key("yellow", 400, "", ""), 401: Key("blue", 401, "", ""), 402: Key("channelup", 402, "", ""), 403: Key("channeldown", 403, "", ""), 404: Key("first", 404, "", ""), 405: Key("last", 405, "", ""), 406: Key("ab", 406, "", ""), 407: Key("next", 407, "", ""), 408: Key("restart", 408, "", ""), 409: Key("slow", 409, "", ""), 410: Key("shuffle", 410, "", ""), 411: Key("break", 411, "", ""), 412: Key("previous", 412, "", ""), 413: Key("digits", 413, "", ""), 414: Key("teen", 414, "", ""), 415: Key("twen", 415, "", ""), 416: Key("videophone", 416, "", ""), 417: Key("games", 417, "", ""), 418: Key("zoomin", 418, "", ""), 419: Key("zoomout", 419, "", ""), 420: Key("zoomreset", 420, "", ""), 421: Key("wordprocessor", 421, "", ""), 422: Key("editor", 422, "", ""), 423: Key("spreadsheet", 423, "", ""), 424: Key("graphicseditor", 424, "", ""), 425: Key("presentation", 425, "", ""), 426: Key("database", 426, "", ""), 427: Key("news", 427, "", ""), 428: Key("voicemail", 428, "", ""), 429: Key("addressbook", 429, "", ""), 430: Key("messenger", 430, "", ""), 431: Key("displaytoggle", 431, "", ""), 432: Key("spellcheck", 432, "", ""), 433: Key("logoff", 433, "", ""), 434: Key("dollar", 434, "", ""), 435: Key("euro", 435, "", ""), 436: Key("frameback", 436, "", ""), 437: Key("frameforward", 437, "", ""), 438: Key("context_menu", 438, "", ""), 439: Key("repeat", 439, "", ""), 440: Key("10channelsup", 440, "", ""), 441: Key("10channelsdown", 441, "", ""), 442: Key("images", 442, "", ""), 448: Key("eol", 448, "", ""), 449: Key("eos", 449, "", ""), 450: Key("ins_line", 450, "", ""), 451: Key("del_line", 451, "", ""), 464: Key("fn", 464, "", ""), 465: Key("fnesc", 465, "", ""), 466: Key("f1", 466, "", ""), 467: Key("f2", 467, "", ""), 468: Key("f3", 468, "", ""), 469: Key("f4", 469, "", ""), 470: Key("f5", 470, "", ""), 471: Key("f6", 471, "", ""), 472: Key("f7", 472, "", ""), 473: Key("f8", 473, "", ""), 474: Key("f9", 474, "", ""), 475: Key("f10", 475, "", ""), 476: Key("f11", 476, "", ""), 477: Key("f12", 477, "", ""), 478: Key("fn1", 478, "", ""), 479: Key("fn2", 479, "", ""), 480: Key("fnd", 480, "", ""), 481: Key("fne", 481, "", ""), 482: Key("fnf", 482, "", ""), 483: Key("fns", 483, "", ""), 484: Key("fnb", 484, "", ""), 497: Key("dot1", 497, "", ""), 498: Key("dot2", 498, "", ""), 499: Key("dot3", 499, "", ""), 500: Key("dot4", 500, "", ""), 501: Key("dot5", 501, "", ""), 502: Key("dot6", 502, "", ""), 503: Key("dot7", 503, "", ""), 504: Key("dot8", 504, "", ""), 505: Key("dot9", 505, "", ""), 506: Key("dot10", 506, "", ""), 512: Key("np0", 512, "", ""), 513: Key("np1", 513, "", ""), 514: Key("np2", 514, "", ""), 515: Key("np3", 515, "", ""), 516: Key("np4", 516, "", ""), 517: Key("np5", 517, "", ""), 518: Key("np6", 518, "", ""), 519: Key("np7", 519, "", ""), 520: Key("np8", 520, "", ""), 521: Key("np9", 521, "", ""), 522: Key("npstar", 522, "", ""), 523: Key("nppound", 523, "", ""), 524: Key("npa", 524, "", ""), 525: Key("npb", 525, "", ""), 526: Key("npc", 526, "", ""), 527: Key("npd", 527, "", ""), 528: Key("focus", 528, "", ""), 529: Key("button", 529, "", ""), 530: Key("toggle", 530, "", ""), 531: Key("on", 531, "", ""), 532: Key("off", 532, "", ""), 533: Key("zoomin", 533, "", ""), 534: Key("zoomout", 534, "", ""), 535: Key("up", 535, "", ""), 536: Key("down", 536, "", ""), 537: Key("left", 537, "", ""), 538: Key("right", 538, "", ""), 539: Key("on", 539, "", ""), 540: Key("off", 540, "", ""), 541: Key("attendant_toggle", 541, "", ""), 542: Key("lights_toggle", 542, "", ""), 560: Key("als_toggle", 560, "", ""), 576: Key("buttonconfig", 576, "", ""), 577: Key("taskmanager", 577, "", ""), 578: Key("journal", 578, "", ""), 579: Key("controlpanel", 579, "", ""), 580: Key("appselect", 580, "", ""), 581: Key("screensaver", 581, "", ""), 582: Key("voicecommand", 582, "", ""), 592: Key("min", 592, "", ""), 593: Key("max", 593, "", ""), 608: Key("prev", 608, "", ""), 609: Key("next", 609, "", ""), 610: Key("prevgroup", 610, "", ""), 611: Key("nextgroup", 611, "", ""), 612: Key("accept", 612, "", ""), 613: Key("cancel", 613, "", ""), 614: Key("up", 614, "", ""), 615: Key("down", 615, "", ""), 616: Key("up", 616, "", ""), 617: Key("down", 617, "", ""), 618: Key("root_menu", 618, "", ""), 619: Key("media_top_menu", 619, "", ""), 620: Key("11", 620, "", ""), 621: Key("12", 621, "", ""), 622: Key("desc", 622, "", ""), 623: Key("mode", 623, "", ""), 624: Key("favorite", 624, "", ""), 625: Key("stop_record", 625, "", ""), 626: Key("pause_record", 626, "", ""), 627: Key("vod", 627, "", ""), 628: Key("unmute", 628, "", ""), 629: Key("fastreverse", 629, "", ""), 630: Key("slowreverse", 630, "", ""), 631: Key("data", 631, "", ""), 635: Key("noop", 635, "", ""), } names = {key.name: key for key in codes.values()} shifted_names = {key.shifted_name: key for key in codes.values()} alt_names = {key.alt_name: key for key in codes.values()}