首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >键盘模块切换监听器

键盘模块切换监听器
EN

Stack Overflow用户
提问于 2021-06-08 05:39:04
回答 2查看 49关注 0票数 1

我刚刚发现了pynput库,这正是我一直在寻找的。我的目标是捕获用户正在键入的键,每当捕获到特定的键序列时,我希望计算机将一个序列写入当前carret的位置。在那之后,我想再次捕获用户的密钥,直到出现另一个值得注意的序列。诸若此类。

问题是,Listener也考虑了keyboard.write()的模拟击键,这导致了一个无限循环,这在它第一次发生时很有趣,但我现在正在尝试摆脱它。

我的方法是在计算机完成输入后停止Listener并创建一个新的,但这个过程在第一次start_listener()调用后会变慢很多,而且我认为这并不是最优的。我已经没有更多的想法了,所以我希望有人能帮上忙。

到目前为止,我的代码如下:

代码语言:javascript
运行
复制
import keyboard
from pynput.keyboard import Key, Listener

def on_press(key):
   stop_listener()
   keyboard.write("Hello", 0.05)
   start_listener()

def on_release(key):
    if key == Key.esc:
        return False

def start_listener():
    global listener
    listener = Listener(on_press=on_press, on_release=on_release)
    listener.start()
    listener.join()

def stop_listener():
    global listener
    listener.stop()

with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()
EN

Stack Overflow用户

发布于 2021-06-08 08:12:08

在我的Linux Mint上,我需要管理员权限才能运行keyboard,但是我可以使用pynput.keyboard.Controllerpress()release()time.sleep()方法执行相同的操作

我使用全局变量paused = False来控制on_press应该何时运行代码,而不是停止和启动listenere。

代码语言:javascript
运行
复制
from pynput.keyboard import Key, Listener, Controller
import time

keyboard = Controller()

def on_press(key):
    global paused  # inform function to assign new value to global variable (instead of creating local variable)
    
    if not paused:
        paused = True
        #keyboard.type("Hello")         # module pynput.keyboard.Controller
        for char in "Hello": 
            keyboard.press(char)    # pynput.keyboard.Controller
            keyboard.release(char)  # pynput.keyboard.Controller
            time.sleep(0.05)
        paused = False

def on_release(key):
    if not paused:
        if key == Key.esc:
            return False

# global variable with default value at start
paused = False

with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

在Linux Mint 20,Python 3.8.5,pynput 1.7.3上测试

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67879004

复制
相关文章

相似问题

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