[英]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_press
、 on_release
和win32_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.