繁体   English   中英

禁止 pynput 的热键组合

[英]Suppress hotkey combinations of pynput

我从pynput 问题页面找到了这段代码,它适用于抑制单键热键。 在过滤器中,仅检测到一个键。 如何应用它来抑制组合键,例如Alt+F4

from pynput import keyboard
 
def keyboard_listener():
    global listener
    def on_press(key):
        print('on press', key)

    def on_release(key):
        print('on release', key)
        if key == keyboard.Key.esc:
            return False # This will quit the listener
 
    def win32_event_filter(msg, data):
        if (msg == 257 or msg == 256) and data.vkCode == 112: # Key Down/Up & F1
            print("Suppressing F1 up")
            listener._suppress = True
            # return False # if you return False, your on_press/on_release will not be called
        else:
            listener._suppress = False
        return True
            
    return keyboard.Listener(
        on_press=on_press,
        on_release=on_release,
        win32_event_filter=win32_event_filter,
        suppress=False
    )

listener = keyboard_listener()

if __name__ == '__main__':
    with listener as ml:
        ml.join() 

on_presson_releasewin32_event_filter总是返回一个动作中的键,因此您需要检查两个按钮是否都被按下并忽略该动作。 更多细节可以在这里找到。 在这里我可以如何抑制该组合键:

from pynput import keyboard
from pynput.keyboard import Key
import time

altPressed = False

def on_press(key):
    global altPressed
    altPressed = (key == Key.alt_l)
    if key == keyboard.Key.esc:
        keyboardListener.stop()

def win32_event_filter(msg, data):
    global altPressed
    if data.vkCode == 115 and altPressed: # suppress f4 when alt_l pressed
        print("suppressed f4")
        keyboardListener.suppress_event()

def on_release(key):
    global altPressed
    altPressed = (key == Key.alt_l)

keyboardListener = keyboard.Listener(on_press=on_press,  
                                     win32_event_filter=win32_event_filter,
                                     on_release=on_release)

if __name__ == '__main__':
    keyboardListener.start()
    while(keyboardListener.is_alive()):
        time.sleep(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM