我正在尝试制作宏/热键

问题描述 投票:0回答:3

它只是不起作用,我收到一条错误消息

AttributeError: 'Controller' object has no attribute 'is_pressed'

代码:

from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller
from pynput.keyboard import Controller
from pynput import mouse
from pynput import keyboard

keyboard = Controller()

while True:
    if keyboard.is_pressed('u'):
        keyboard.press('w')
        keyboard.release('w')
       

有人可以帮帮我吗!

python macros hotkeys
3个回答
1
投票

pynput
有特殊的类
Listener
来捕获按下的按键。它在线程中运行,不需要
while True
,因此不会阻塞主代码。

ESC
停止。

from pynput.keyboard import Key, Controller, Listener

def on_press(key):
    print('{} pressed'.format(key))
    #print(dir(key))

    try:
        if key.char == 'u':
            keyboard.press('w')
            keyboard.release('w')
    except Exception as ex:
        print(ex)
    
def on_release(key):
    print('{} release'.format(key))

    if key == Key.esc:
        # Stop listener
        return False

# --- main ---

keyboard = Controller()

listener = Listener(on_press=on_press, on_release=on_release)

listener.start()

# ... other code ...

listener.join()

顺便说一句:

如果您想在系统中使用全局宏/热键并使用Linux,那么您可以使用特殊程序AutoKey来实现此目的。它是用 Python 创建的,并且有 GUI 来创建宏/脚本/等。

如果您想在系统中使用全局宏/热键并使用Windows,您可以使用流行的AutoHotKey

如果您想在某些

GUI
程序中创建宏/热键,那么您应该使用
GUI
函数。


0
投票

查看文档,下面是其中的一个片段。

全局热键

键盘监视器的一个常见用例是对全局热键做出反应。 由于侦听器不维护任何状态,因此涉及的热键 多个键必须在某处存储此状态。

pynput 为此提供了

pynput.keyboard.HotKey
类。它包含两种更新状态的方法,旨在轻松 可与键盘监听器互操作:
pynput.keyboard.HotKey.press
pynput.keyboard.HotKey.release
可以直接传递为 监听器回调。

[...]

这将创建一个热键,然后使用侦听器来更新其 状态。一旦同时按下所有指定的键,

on_activate
将被调用。

请注意,密钥是通过

pynput.keyboard.Listener.canonical
传递的 在传递给
HotKey
实例之前。这是为了删除任何 从按键事件中获取修改器状态,并使用以下规范化修改器 不止一个物理按钮。

方法

pynput.keyboard.HotKey.parse
是一个方便的函数 将快捷方式字符串转换为按键集合。请看它的 文档以获取更多信息。

要注册多个全局热键,请使用便利类

pynput.keyboard.GlobalHotKeys


0
投票

我为此制作了一个极其简单的可选库:envoke

这是一个简单的例子:

from envoke import envoke

# Create a macro sequence
c = envoke()
c.a(interval=0.5).b(interval=0.5).key('5', interval=0.1)

# Run the macro
c.run(start_delay=3.5)
© www.soinside.com 2019 - 2024. All rights reserved.