打开任务管理器后keyboard.add_hotkey停止工作
Posted
技术标签:
【中文标题】打开任务管理器后keyboard.add_hotkey停止工作【英文标题】:keyboard.add_hotkey stops working after opening taskmanager 【发布时间】:2021-01-05 14:08:31 【问题描述】:我正在使用python模块键盘创建一个热键,它的工作方式与预期一样,直到我打开任务管理器,之后热键停止工作,创建一个新的没有帮助,之后没有热键工作任务管理器打开。
import keyboard
def hello():
print('hello world!')
keyboard.add_hotkey('alt+p', hello, args=())
while True:
pass
上面的代码只是一个复制问题的例子,我导入模块,创建一个热键,然后创建一个无限的while循环,这样程序就不会退出,并且热键工作直到你打开任务管理器。
我需要使用 add_hotkey 而不是任何其他功能的原因是因为我打算将它用于更大的程序,并且 add_hotkey 不会减慢应用程序的速度,但当然,它可能会中断,然后只有重新启动程序将修复它。
我已经尝试了很多东西,部分工作,重新导入模块效果很好,但我没有办法知道重新导入它的正确时间,我也可以运行程序admin,这也解决了这个问题,但我不希望程序仅仅因为热键功能而以管理员身份运行。
【问题讨论】:
【参考方案1】:我进行了更多测试,并找到了答案(令人惊讶的是,在某处在线发布问题后回答自己的问题是多么容易)。
基本上我的程序没有管理员权限,所以键盘模块在启动任务管理器时会暂停,我知道它确实如此,但我认为它破坏了整个模块。实际发生的情况是,我通过按 ctrl shift esc 启动任务管理器,键在程序中注册,然后管理器启动,程序暂停,当我松开键时,程序不会注册。
所以每当我按 alt + p 时,模块都会认为我在按 ctrl shift esc alt p。
要修复它,您只需按下所有三个键,但不要同时按下来刷新它。
我还没有尝试过,但我要做的只是让我的程序在任何键盘按下后清除所有键,这样热键仍然可以工作,并且在 ctrl shift esc 之后它会挂起,然后取消暂停并清除剩余的输入。
【讨论】:
【参考方案2】:我遇到了困难,因为我遇到了同样的问题。 我终于找到了解决方案! 它正在使用“keyboard.hook_key”。
这是我的代码。
import keyboard
temp = False
def switch(e):
global temp
if 'down' in e:
temp = True
else:
temp = False
def check(e):
global temp
if temp and 'down' in e:
print('It works!!')
keyboard.hook_key('alt', lambda e: switch(str(e)))
keyboard.hook_key('p', lambda e: check(str(e)))
keyboard.wait()
'hook_key'只检测键盘上单个按键的'Down'和'Up'事件,所以即使开启任务管理器也能正常工作。
【讨论】:
以上是关于打开任务管理器后keyboard.add_hotkey停止工作的主要内容,如果未能解决你的问题,请参考以下文章
win8win10下卸载程序报错误25022503的解决办法