python - 现场键盘输出变化
问题描述
嗨(我很抱歉我的英语提前)我需要帮助。
我是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)
解决方案
推荐阅读
- r - 将值部分分配给数据框时,“替换中不支持的矩阵索引”
- javascript - 根据未选择的选择器自定义警报/错误消息
- typescript - 访问键入的快速响应
- chart.js - 有什么方法可以在图表 js 中获得 Chiselled Effect 吗?
- jquery - 单击表中的行,我想隐藏下面的 tr 标签
- c# - 数据库仅在关闭和打开对话框后更新
- java - ActiveMQ - 当我想停止 Java 进程时它保持活动状态
- c# - 在 app.config 中读/写 ConnectionString
- java - 用于验证标头的 spring-boot 自定义注释
- javascript - UnhandledPromiseRejectionWarning:错误:属性“密码”不存在。pg-promise