【问题标题】:Python - get raw mouse inputPython - 获取原始鼠标输入
【发布时间】:2020-08-30 21:45:08
【问题描述】:

我想使用 Python 从鼠标读取原始数据(例如左信号、右信号)独立于鼠标指针。我不想读取光标的位置,我想要读取原始数据,类似于游戏的方式。我怎样才能做到这一点?我找不到任何支持它的库。

我正在使用 Windows。

编辑:澄清一下,当我说“左信号和右信号”时,我指的是鼠标移动,而不是鼠标点击, 编辑2:我相信术语是我想要“鼠标三角洲”。这就是人们在 autohotkey 中的做法 - https://www.autohotkey.com/boards/viewtopic.php?t=10159 - 但我希望在 Python 中使用它。

编辑3:我应该提到这是在不断重置指针位置的游戏中,所以我不能使用指针位置的差异。这就是我想要较低级别 API 的原因。

【问题讨论】:

  • 我应该解释得更好——当我说左右信号时,我指的是鼠标移动,而不是鼠标点击。如果您也删除了反对票,我将不胜感激,现在我已经澄清了。
  • stackoverflow.com/questions/44533241/… 你可以随时结合这两种解决方案
  • 你没有在听。我知道如何获得这样的鼠标输入。我用它所有的时间。这在我的情况下不起作用(测量我如何在游戏中移动我的视图。)使用该方法它只是将我的光标显示在屏幕中间。我想看到的是鼠标增量,而 pyautogui 不获取鼠标增量。
  • @AlexAndHisScripts 您找到了可行的解决方案吗?我正在研究需要完全相同的低级鼠标信号数据访问的东西。 pyautogui 不允许这样做,只获取对我无用的当前鼠标位置。计算任意增量也是如此,因为鼠标位置来回“跳跃”,因为我试图将我的应用程序与 3D PC 游戏一起运行。任何回应将不胜感激。

标签: python mouse mouselistener


【解决方案1】:

获取鼠标位置并比较两个事件。如果x轴值增加,鼠标右移,如果x轴值减小,鼠标左移:

from pynput.mouse import Listener

last_position = None

def on_move(x, y):
    global last_position
    if last_position:
        if x > last_position:
            print('mouse moved right')
        elif x < last_position:
            print('mouse moved left')
    last_position = x

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

【讨论】:

  • 感谢您的回复。不幸的是,游戏(我应该提到我正在尝试捕捉我对游戏的输入,我已经编辑了我的帖子)不断重置位置。但是,我很高兴回答在我描述的情况下会起作用的东西,即使我没有正确描述它并且它在实际情况下也不起作用。
【解决方案2】:

您始终可以不断比较容易给您增量的位置。任何较低级别的 API,您都必须自己编写鼠标驱动程序,这是游戏开发人员为防止人们编写脚本而做的事情,而这不是 python 的用途。

import pyautogui
import time


while True:
    prev_x, prev_y = pyautogui.position()
    time.sleep(0.3)
    curr_x, curr_y = pyautogui.position()
    if (curr_x - prev_x) > 0:
        print("move right")
    else:
        print("move left")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多