【问题标题】:How do I use side mouse buttons with Pynput?如何在 Pynput 中使用侧鼠标按钮?
【发布时间】:2019-03-05 18:32:19
【问题描述】:

我正在使用 Python 模块 Pynput 来制作一个可以按下我的侧边按钮之一的宏。有谁知道 Pynput 中的侧边按钮叫什么? 例如:

from pynput.mouse import Button, Controller

mouse = Controller()

mouse.press(Button.SIDEBUTTON)
mouse.release(Button.SIDEBUTTON)

SIDEBUTTON 部分会发生什么?

【问题讨论】:

  • “侧边按钮”不是标准术语。不同的鼠标制造商将使用不同的事件代码;按钮 4 和 5 很常见,但不是给定的。
  • 所以这里的问题是:什么鼠标

标签: python macros mouse pynput


【解决方案1】:

鼠标模型上的其他按钮通常表示为“按钮 6”和“按钮 7”等(按钮 4 和 5 是滚动“按钮”)。一些鼠标制造商会发送键盘代码(如多媒体按钮或其他自定义代码)。

但是,对于 Windows 和 OS X,Pynput 仅支持鼠标左键、右键、中键,因此就 Pynput 而言,您在这些平台上会很不走运。如果您使用的是 Linux(带有 X.org 后端),您可以发送和接收更多按钮,从 button8 一直到 button31,以及 scroll_upscroll_down、@987654327 @ 和scroll_right

因此,根据您使用的鼠标型号和操作系统,您可能能够为这些按钮获取正确的事件,无论是鼠标按钮还是键盘事件。同时注册mousekeyboard listener,并打印出鼠标单击事件的按钮值,以及键盘按下或释放事件的键,看看是否可以显示侧按钮。

如果不是在 Linux 上,如果特定的鼠标按钮作为键盘事件发送,那么你很幸运,可以使用键盘控制器发送相同的事件。如果不是,那么 Pynput 也无法发送此类鼠标按钮事件。

这并不是说你根本不能发送这样的按钮点击,但是你必须研究用于 Windows 或 OSX 的控制器的源代码,然后看看底层框架如何接受除了左键之外的其他按钮按下, 右边和中间。

【讨论】:

  • 如果它们不是键盘事件,pynput 中是否有办法至少接收这些按钮的事件?
  • @TheElementalofCreation 我不知道。您是否尝试过为键盘和鼠标事件注册监听器?
  • @TheElementalofCreation(我发现我错过了一个我本来打算在那里的链接;现在添加了)。
  • 他们都没有捡到任何东西。然而,在测试其他东西时,我发现如果我向鼠标侦听器添加一个事件过滤器,那么鼠标侦听器确实会看到它们的事件,但它们永远不会传递给其他函数。这是有问题的,因为尝试从那里访问数据通常只会让我的 python 解释器完全崩溃而没有警告。
  • 具体来说,在我的例子中,我使用关键字参数“win32_event_filter”来传递一个函数,该函数会将函数的两个参数(msg 和 data)保存到一个全局数组中,这样我就可以搞砸了随心所欲。
【解决方案2】:

不幸的是,pynput 中没有这样的功能,如果您运行此代码并按下鼠标侧键,您会发现它不会给您任何输出:

from pynput import mouse


def on_click(x, y, button, pressed):
    if pressed:
        print ('Mouse clicked {2}'.format(x, y, button))


with mouse.Listener(on_click=on_click) as listener:
    listener.join()

【讨论】:

    【解决方案3】:

    所以这个问题有点老了,我也遇到了同样的问题。我弄清楚这些按钮是如何被调用的:

    Mouse4 和 Mouse5 的 Button.x1 和 Button.x2。

    希望我能帮助你。我以前找到的脚本就在这里:

    from pynput.mouse import Listener
    def on_click(x, y, button, pressed):
        if pressed:
           print(button)
       
    # Collect events until released
    with Listener(on_click=on_click) as listener:
        listener.join()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 2021-07-02
      • 2021-07-12
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多