fix(pynput): Add dead key detection condition to support German keyboard

This commit is contained in:
Asura 2022-07-04 02:14:47 -07:00
parent 002f06a767
commit 9e8d8e4357
2 changed files with 6 additions and 3 deletions

View File

@ -139,8 +139,10 @@ class MyController(Controller):
else: else:
keycode, shift_state = self._display.keysym_to_keycode(keysym), 0 keycode, shift_state = self._display.keysym_to_keycode(keysym), 0
# The keycode of the dead key is inconsistent keycode_set = set(map(lambda x: x[0], self.keyboard_mapping[keysym]))
if keycode != self._display.keysym_to_keycode(keysym): # The keycode of the dead key is inconsistent, The keysym has multiple combinations of a keycode.
if keycode != self._display.keysym_to_keycode(keysym) \
or (keycode_flag == False and keycode == list(keycode_set)[0] and len(keycode_set) == 1):
deakkey_chr = str(key).replace("'", '') deakkey_chr = str(key).replace("'", '')
keysym = DEAD_KEYS[deakkey_chr] keysym = DEAD_KEYS[deakkey_chr]
keycode, shift_state = self.keyboard_mapping[keysym][0] keycode, shift_state = self.keyboard_mapping[keysym][0]
@ -226,7 +228,7 @@ def loop():
else: else:
keyboard.release(name) keyboard.release(name)
except Exception as e: except Exception as e:
print(e) print('[x] error key',e)
loop() loop()

View File

@ -276,6 +276,7 @@ impl Handler {
KeyRelease(k) => (k, 0), KeyRelease(k) => (k, 0),
_ => return, _ => return,
}; };
log::debug!("{:?}", key);
let alt = get_key_state(enigo::Key::Alt); let alt = get_key_state(enigo::Key::Alt);
#[cfg(windows)] #[cfg(windows)]
let ctrl = { let ctrl = {