打开任务管理器后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的解决办法

进入linux的进程管理器后不知道怎么退出来了

win10系统在安装卸载SVN时出现2502错误代码的问题

如何解决win8系统下卸载软件出现错误代码为2502和2503的问题

关闭上下文管理器后保持适合文件的可访问性

windows 10桌面白屏