首页 > 解决方案 > Python 键盘和鼠标监听器。配置按键和鼠标全拦截,按键取消

问题描述

我想配置拦截键盘和鼠标事件。这样,当按下键盘上的按钮时,系统就会完全拦截动作。与此同时,我的职能继续被执行。并且,相应地,按钮(相同或另一个 - 不是重点)取消了完全拦截并进一步“监听”事件。

编码:

from pynput import mouse
from pynput import keyboard
import time

global Listener
Listener = None

def ctrl_1():
    printt("Ctrl+f1")
    startListener(True)

def ctrl_2():
    printt("Ctrl+2")
    startListener(False)

def key_1():
    printt("f1")

def key_2():
    printt("f2")

def f12():
    printt ("stop")

def on_keypress(key):
    printt("on_keypress")

def on_keyrelease(key):
    printt("on_keyrelease")

def on_move(x, y):
    printt("on_move")

def on_click(x,y, button, pressed):
    printt("on_click")

def main ():
    startListener(False)

def printt (string):
    t1 = int(time.time())
    print (string+" "+str(t1))

def startListener (flag):
    global Listener
    if Listener:
        Listener.stop()
    with mouse.Listener(on_move=on_move, on_click = on_click, suppress=flag) as Listener:
        with keyboard.Listener(on_press=on_keypress, on_release = on_keyrelease, suppress=False) as Listener:
            with keyboard.GlobalHotKeys({
                    '<ctrl>+1': ctrl_1,
                    '<ctrl>+2': ctrl_2,
                    '<f1>': key_1,
                    '<f2>': key_2,
                    '<f12>': f12
                    }, suppress=False) as Listener:
                Listener.join()

main()

在这种形式中,按 进行完全拦截Ctrl-1。在这种情况下,只是在鼠标上,但按下Ctrl-2并没有取消,虽然启动了相应的功能。

还有一个缺点 - 每次按下Ctr-1......都会Ctr-2逐渐增加为脚本执行分配的内存。(不要骂太多)我是初学者。

任何人都可以帮助改进我的代码吗?谢谢你。

标签: pythonkeyboardlistenermouse

解决方案


推荐阅读