【问题标题】:GlobalHotKeys pynput not working not reacting to function keysGlobalHotKeys pynput 不工作对功能键没有反应
【发布时间】:2022-12-07 22:01:06
【问题描述】:

社区。我想在这里用 python 编写一个快速热键脚本。 出于某种原因,它不会对功能键做出反应,这意味着表达式 '<ctrl>+<F2>': function_1 不起作用。

我无法在官方文档或其他在线示例中找到任何线索。有什么想法吗?

这是测试脚本。

from pynput import keyboard

def function_1():
    print('Function 1 activated')

def function_2():
    print('Function 2 activated')

with keyboard.GlobalHotKeys({
        '<ctrl>+<F2>': function_1,
        '<ctrl>+t': function_2}) as h:
    h.join()

【问题讨论】:

  • 您的键盘是否有特殊功能键,例如音量增大、静音等?如果您的功能锁处于活动状态,则这些按键可能不会被识别为 &lt;Ctrl&gt;+&lt;F2&gt;
  • 我尝试更改功能锁,但没有用。我确实在另一台笔记本电脑上尝试过这个脚本,它按预期工作。这似乎是笔记本电脑问题或者 win11 问题..不确定

标签: python pynput


【解决方案1】:

您可以尝试设置一个通用处理程序来查看生成了哪些事件:

from pynput import keyboard
from pynput.keyboard import Controller

keyboard_controller = Controller()

# The event listener will be running in this block
with keyboard.Events() as events:
    for event in events:
        if event.key == keyboard.Key.esc:
            break
        else:
            print(f"Received event {event}")

运行此脚本将打印按键事件,按下Esc键将退出脚本:

Received event Press(key='a')
Received event Release(key='a')
Received event Press(key=Key.media_volume_up)
Received event Release(key=Key.media_volume_up)
Received event Press(key=Key.f3)
Received event Release(key=Key.f3)
Received event Press(key=Key.ctrl)
Received event Press(key=Key.media_volume_up)
Received event Release(key=Key.media_volume_up)
Received event Release(key=Key.ctrl)

请注意,这不会处理热键,而且我没有看到某些按键,例如获得Key.media_volume_up我按下的事件Fn+F3.

您可能会使用 keyboard.Events() 处理来触发您自己的等效热键。

【讨论】:

    【解决方案2】:

    我通过离开解决了这个问题输入法全局热键并仅使用键盘反而。我仍然不明白这个问题的本质,全局热键无法识别F1钥匙..

    这是我使用的解决方案。我还添加了值的传递拉姆达每个热键的功能。

    import keyboard
    
    def func1(key):
        print("F1 is pressed with value: ", key)
    
    def func2(key):
        print("F2 is pressed with value: ", key)
    
    # define hotkeys
    keyboard.add_hotkey('F1', lambda: func1("value1"))
    keyboard.add_hotkey('F2', lambda: func2("value2"))
    
    # run the program until 'F12' is pressed
    keyboard.wait('F12')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2020-07-04
      • 2017-05-03
      • 2018-10-30
      • 2021-05-22
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多