【问题标题】:Override user keys with pynput用 pynput 覆盖用户密钥
【发布时间】:2020-09-09 20:13:09
【问题描述】:

我正在尝试使用 pynput 库编写一个程序,该库跟踪用户按键以及当用户按下特殊字符键时,例如:# 我的程序将立即按下另一个键。 例如,当用户按下 $ 符号时,程序将在其后按左键,光标将在 $ 符号后面移动一个字符。我的问题是,对于键入 $ 符号,用户按下 SHIFT + 5 并且在大多数情况下,用户只释放数字键并且 shift 键保持按下状态。在这种情况下,当我的程序按下左键时,插入仅按下左键,按下 SHIFT + 左键,这会导致标记字符而不是向左移动。 我想知道是否可以忽略用户密钥或以某种方式覆盖它。 感谢您的帮助。 谢谢

from pynput.keyboard import Key, Listener, Controller
import re

keyboard = Controller()
REGEX = re.compile('[@_!#$%^&*()<>?/\|}{~:]')

def on_press(key):
    try:
        if key != Key.left:
            if REGEX.search(key.char) != None:
                keyboard.press(Key.left)
                keyboard.release(Key.left)
                print("I pressed left for you")
        else:
            print("Nothing")
    except Exception as e:
        print(e)

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

【问题讨论】:

    标签: python python-3.x keyboard keypress pynput


    【解决方案1】:

    你可以释放Shift,他们做你想做的事。 以防万一,如果用户想继续按特殊字符,请在您工作后按shift

    所以你的代码可能是:

    from pynput.keyboard import Key, Listener, Controller
    import re
    
    keyboard = Controller()
    REGEX = re.compile('[@_!#$%^&*()<>?/\|}{~:]')
    
    def on_press(key):
        try:
            if key != Key.left:
                if REGEX.search(key.char) != None:
                    keyboard.release(Key.shift) # release
                    keyboard.press(Key.left) # your work
                    keyboard.release(Key.left)
                    keyboard.press(Key.shift) # also keep pressed
                    print("I pressed left for you")
            else:
                print("Nothing")
        except Exception as e:
            print(e)
    
    with Listener(on_press=on_press) as listener:
        listener.join()
    

    【讨论】:

    • 我试过你的代码,但看起来“keyboard.release(Key.shift)”没有释放用户按下的 shift。你用的是MAC吗?可能存在行为差异。
    • Shift 将保持按下状态,但用户仍然可以保持按下状态,因此这不起作用。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多