首页 > 解决方案 > 现场键盘输出变化

问题描述

嗨(我很抱歉我的英语提前)我需要帮助。

我是python的新手,我正在尝试一些我似乎无法在网上任何地方找到任何帮助的东西。长话短说,我正在尝试创建一种方法来执行以下操作:

当我启动我的脚本时,它会改变我的键盘实时输出我不想打印。假设我打开“记事本”并开始打字。输入时,如果我按“<em>A”,它将输入“<em>B”</p>

例如,如果我输入“<em>Apple”,它将是“<em>Bhhil”(它只是一个 exp)。

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

如果我检测到让我们说字母“<em>A”并且在我的脚本中这个字母被设置为替换为“<em>B”我的脚本将按“<em>backspace”然后输入“<em>B” . 但是用这种方式我曾经对“监听器”有一个问题,每次我将“ A ”更改为“ B ”时,他都会陷入循环,因为更改它的方式是通过“虚拟”按下和释放键盘它会将“ B ”更改为“ C ”等...我设法通过在发送“ B ”命令时停止侦听器来找到解决方案。

现在我遇到的问题是脚本运行良好,但是在我使用“CTRL + C”(KeyboardInterrupt)停止它之后

这是解释的棘手部分:

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

抱歉,我不知道我是否说清楚了,但这是下面的代码,如果您可以尝试并帮助我,我将不胜感激,是的,我的代码一团糟,是的,也许 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)

标签: pythonpython-3.x

解决方案


推荐阅读