def do_get_keycode(self, client_keycode, keyname, pressed, modifiers, keyval, keystr, group): keycode = KEYCODES.get(keyname, -1) if keycode == -1 and keystr and len(keystr) == 1: v = VkKeyScanW(keystr) vk_code = v & 0xff if vk_code > 0 and vk_code != 0xff: keycode = vk_code log("get_keycode%s=%s", (client_keycode, keyname, pressed, modifiers, keyval, keystr, group), keycode) return keycode, group
def init_keycodes(): #lookup the constants: keycodes = {} for vk, name in VIRTUAL_KEYS: vk_name = "VK_%s" % vk if hasattr(win32con, vk_name): val = getattr(win32con, vk_name) keycodes[name] = val log("KEYCODES[%s]=win32con.%s=%s", name, vk_name, val) elif vk in DEFS: #fallback to our hardcoded definitions: val = DEFS[vk] keycodes[name] = val log("KEYCODES[%s]=%s=%s", name, vk, val) else: log.warn("missing key constant: %s", vk_name) for name, char in KEYSYM_DEFS.items(): if len(char) != 1: log.warn("invalid character '%s' : '%s' (len=%i)", name, char, len(char)) continue v = VkKeyScanW(char) vk_code = v & 0xff if vk_code > 0 and vk_code != 0xff: log("KEYCODE[%s]=%i (%s)", char, vk_code, name) keycodes[name] = vk_code else: log("no keycode for %r (%s)", char, name) keycodes.update({ "Shift_L": win32con.VK_LSHIFT, "Shift_R": win32con.VK_RSHIFT, "Control_L": win32con.VK_LCONTROL, "Control_R": win32con.VK_RCONTROL, "Caps_Lock": win32con.VK_CAPITAL, "Num_Lock": win32con.VK_NUMLOCK, "Scroll_Lock": win32con.VK_SCROLL, }) for c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": keycodes[c] = ord(c) keycodes[c.lower()] = ord(c) for c in "0123456789": keycodes[c] = ord(c) return keycodes
val = DEFS[vk] KEYCODES[name] = val log("KEYCODES[%s]=%s=%s", name, vk, val) else: log.warn("missing key constant: %s", vk_name) for name, char in KEYSYM_DEFS.items(): try: bchar = char.encode("latin1") except: continue if len(char) != 1: log.warn("invalid character '%s' : '%s' (len=%i)", name, char, len(char)) continue v = VkKeyScanW(char) vk_code = v & 0xff if vk_code > 0 and vk_code != 0xff: log("KEYCODE[%s]=%i (%s)", char, vk_code, name) KEYCODES[name] = vk_code KEYCODES.update({ "Shift_L": win32con.VK_LSHIFT, "Shift_R": win32con.VK_RSHIFT, "Control_L": win32con.VK_LCONTROL, "Control_R": win32con.VK_RCONTROL, "Caps_Lock": win32con.VK_CAPITAL, "Num_Lock": win32con.VK_NUMLOCK, "Scroll_Lock": win32con.VK_SCROLL, })