【问题标题】:keyboard.add_hotkey stops working after opening taskmanager打开任务管理器后keyboard.add_hotkey停止工作
【发布时间】: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,这也解决了这个问题,但我不希望程序仅仅因为热键功能而以管理员身份运行。

【问题讨论】:

    标签: python python-3.x windows keyboard hotkeys


    【解决方案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'事件,所以即使开启任务管理器也能正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多