首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抑制pynput的热键组合

抑制pynput的热键组合
EN

Stack Overflow用户
提问于 2022-04-29 15:54:01
回答 1查看 208关注 0票数 0

我从pynput问题页中找到了这段代码,它适用于抑制单键热键。在筛选器中,只检测到一个键。如何将此应用于抑制键组合(如Alt+F4 )

代码语言:javascript
运行
复制
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() 
EN

回答 1

Stack Overflow用户

发布于 2022-09-20 04:07:38

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

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72060632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档