Я долго ломал голову над тем, почему это не работает уже некоторое время, и я нашел способ заставить это работать.
Когда вы вызываете keyboard.send
, этот метод анализирует заданный горячие клавиши и пытается отправить scan_code
для каждой указанной вами клавиши.
Он анализирует клавиши с помощью метода keyboard.parse_hotkey
. Если мы сами вызовем этот метод, мы сможем увидеть, какие коды мы возвращаем:
>>> keyboard.parse_hotkey("ctrl+shift+left")
(((29, 57373), (42, 54), (75,)),)
Здесь мы видим, что оба ctrl
и shift
имеют два кода, каждый для своих правых / левых аналогов.
Как вы обнаружили, так же как и я, если вы попытаетесь вызвать горячую клавишу, например shift+home
, комбинация кнопок кажется работает правильно, потому что ваше положение в документе кажется, меняется. Однако похоже, что способ (по крайней мере, на моей стороне), которым система обрабатывает вызовы на shift
, не работает, когда вы вызываете только один из кодов shift
.
Мы можем изменить горячую клавишу чтобы включить оба кода, вызывая их по отдельности в горячей клавише:
>>> keyboard.parse_hotkey("ctrl+right shift+left shift+left")
(((29, 57373), (54,), (42,), (75,)),)
Если мы обновим ваш код, включив вместо него указанную выше горячую клавишу, мы увидим, что происходит ожидаемое поведение:
import keyboard
def test():
keyboard.send("ctrl+right shift+left shift+left")
keyboard.send("ctrl+c")
keyboard.send("b,b,b,b")
keyboard.send("ctrl+v")
keyboard.add_word_listener("test", test, ['tab'], False, 1)
keyboard.wait()
На момент написания я точно не знаю почему приведенный выше код работает, а ваш исходный - нет.