实时键盘输出更改

2024-09-28 05:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

你好(我为我的英语提前道歉)我需要帮助

我是python新手,我正在尝试一些在网上找不到任何帮助的东西。长话短说,我试图创造一种方法来完成以下工作:

每当我启动脚本时,它都会更改我的键盘Live输出我不想打印。假设我打开“记事本”,开始打字。键入时,如果我按“A”,它将键入“B

例如,如果我键入“Apple”,它将是“bhil”(它只是一个exp

我接近这个结果的唯一方法是使用库“pynput”和“键盘”,但我这样做效率不高。我将解释这个过程:

如果我检测到字母“A”并且在我的脚本中,该字母被设置为替换为“B”,我的脚本将按“backspace”然后键入“B”。但是用这种方式,我以前对“监听器”有个问题,每次我把“a”改成“B”时,他都会陷入一个循环中,因为改变它的方式是通过“实际上是”按下并松开键盘,它会把“B”改成“C”等等。。。 我通过在发送“B”命令时停止侦听器,找到了一个解决方案

现在我遇到的问题是,脚本工作正常,但在我使用“CTRL+C”(键盘中断)停止脚本后

这是需要解释的棘手部分:

它将按键发送到我的键盘(可能是我之前按下的按键),我无法阻止它

抱歉,我不知道我是否已经说清楚了,但下面是代码,如果您能尝试一下并帮助我,我将不胜感激,是的,我的代码很混乱,是的,也许python不是做这类事情的正确语言,但我真的想用python实现它,是的,我是python新手,所以请不要对我无礼:)

from keyboard import press, release
from pynput.keyboard import Listener


class changeOutput:

    def __init__(self):
        self.alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                      's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

        self.invertedAlpha = ['z', 'y', 'x', 'w', 'v', 'u', 't', 's', 'r', 'q', 'p', 'o', 'n', 'm', 'l', 'k',
                              'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

        self.stop = True  # Stop The Listener

    def on_press(self, key):
        try:
            clearKey = str(key).replace("'", "")  # 'a' --> a

            if clearKey in self.alpha:
                self.stop = False
                press('backspace')
                press(self.invertedAlpha[self.alpha.index(clearKey)])
                self.stop = True
                self.start(stop=self.stop)
        except KeyboardInterrupt:
            self.stop = False
            self.start(stop=False)
            return False

    def on_release(self, key):
        try:
            clearKey = str(key).replace("'", "")  # 'a' --> a

            if clearKey in self.alpha:
                release(self.invertedAlpha[self.alpha.index(clearKey)])
                self.stop = True
                self.start(stop=self.stop)
        except KeyboardInterrupt:
            self.stop = False
            return False

    def start(self, stop):
        while stop is True:
            try:
                with Listener(on_press=self.on_press, on_release=self.on_release) as listener:
                    listener.join()
            except KeyboardInterrupt:
                break


if __name__ == '__main__':
    changeOutput().start(stop=True)

Tags: keyselfalpha脚本falsetruerelease键入

热门问题