问题描述
我正在使用python模块键盘创建一个热键,在打开任务管理器之前,它的工作原理与预期相同,此后该热键停止工作,创建一个新的热键无济于事,之后没有任何热键起作用任务管理器被打开。
import keyboard
def hello():
print('Hello World!')
keyboard.add_hotkey('alt+p',hello,args=())
while True:
pass
上面的代码只是一个复制问题的示例,我导入了模块,创建了一个热键,然后创建了一个无限的while循环,这样程序就不会退出,并且该热键可以正常工作,直到 您打开任务管理器。
之所以我需要使用add_hotkey而不是其他任何功能的原因是因为我要在更大的程序中使用它,并且add_hotkey不会降低应用程序的运行速度,但是当然,它可能会崩溃,然后只能重新启动程序将解决该问题。
我已经尝试了很多东西,但部分工作了,重新导入该模块效果很好,但是我没有办法知道正确导入该模块的时间,而且我也可以按以下方式运行该程序: admin,它也解决了这个问题,但是我不希望仅由于热键功能而将程序作为admin运行。
解决方法
我正在运行更多测试,但找到了答案(在网上将问题发布到某个地方后,回答自己的问题是如此容易。
基本上,我的程序没有管理员权限,因此启动任务管理器时键盘模块会暂停,虽然我知道这样做,但是我认为它破坏了整个模块。实际发生的情况是,我通过按ctrl shift esc启动了任务管理器,将密钥注册到了程序中,然后启动了管理器,程序暂停了,而当我松开这些键时,程序没有进行注册。
因此,每当我按alt + p时,模块就会以为我按了ctrl shift esc alt p。
要修复此问题,只需按所有三个键,但不能同时刷新它。
我还没有尝试过,但是我要做的就是简单地让我的程序在按下任何键盘后清除所有键,这样热键仍然可以起作用,并且在ctrl shift esc之后它将挂起,然后取消暂停并清除剩余的输入。
,我过得很艰难,因为我遇到了同样的问题。 我终于找到了解决方案! 它使用的是“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'事件,所以即使打开任务管理器也能正常工作。