打开taskmanager后keyboard.add_hotkey停止工作

问题描述

我正在使用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'事件,所以即使打开任务管理器也能正常工作。