我从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()
发布于 2022-09-20 04:07:38
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)
https://stackoverflow.com/questions/72060632
复制相似问题