Использование Python для создания горячей клавиши, которая вводит текст - PullRequest
0 голосов
/ 11 января 2019

Я следовал некоторым другим учебным пособиям и смог создать приложение, которое печатает «Detected HotKey» при каждом нажатии Shift + P на клавиатуре. Ниже приведен код .py, который я использовал. Он печатает только текст в командном окне, которое открывается при запуске .exe. Я надеялся, что смогу получить что-то, что входит в текст в позиции моего курсора. Я использую Python 3.7

Например, я бы хотел, чтобы быстрая клавиша Shift + P могла вводить текст, когда я общаюсь в Discord, Slack или Gmail. Это возможно? или есть лучший способ сделать что-то подобное?

from pynput import keyboard

COMBINATIONS = [
        {keyboard.Key.shift, keyboard.KeyCode(char="p")},
        {keyboard.Key.shift, keyboard.KeyCode(char="P")}
        ]

current = set()

def execute():
    print("Dectected HotKey")

def on_press(key):
    if any ([key in COMBO for COMBO in COMBINATIONS]):
        current.add(key)
        if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
            execute()

def on_release(key):
    if any([key in COMBO for COMBO in COMBINATIONS]):
        current.remove(key)

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

1 Ответ

0 голосов
/ 11 января 2019

Это небольшая модификация, которая делает то, что вы хотите, у меня заняло около 2 минут чтения pynput документации:

from pynput import keyboard
from pynput.keyboard import Key, Controller

kbd = Controller()

COMBINATIONS = [
        {keyboard.Key.shift, keyboard.KeyCode(char="p")},
        {keyboard.Key.shift, keyboard.KeyCode(char="P")}
        ]

current = set()

def execute():
    print("Dectected HotKey") #goes into the console window

    #"hitting" backspace to remove the "P",
    #must be unnecessary if we use some other modifier (Alt, Ctrl)
    kbd.press(Key.backspace)
    kbd.release(Key.backspace)

    kbd.type('Hi motherfucker!') #goes into the active app window

def on_press(key):
    if any ([key in COMBO for COMBO in COMBINATIONS]):
        current.add(key)
        if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
            execute()

def on_release(key):
    if any([key in COMBO for COMBO in COMBINATIONS]):
        current.remove(key)

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

И текст будет в заглавных буквах, потому что вы все еще будете удерживать Shift в тот момент, когда он «напечатан».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...