如何使用 Python 读取原始鼠标输入?

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

我知道 PyAutoGUI 和 Pynput 可以读取鼠标输入,但它们只能读取屏幕上的坐标。我正在尝试创建一个宏记录器,但我需要能够读取传送到我的计算机的输入,而不是读取鼠标的当前位置。

我正在尝试为《我的世界》游戏制作一个宏录制器,该游戏的屏幕锁定在屏幕中央。我相信当您移动鼠标时,它会稍微移动其位置,然后返回到屏幕中心。我尝试过以此为基础编写代码,但结果有点“finnicky”:

import pyautogui
import time

x_coords = []
y_coords = []

base_position_x, base_position_y = pyautogui.position()

while True:
  current_position_x, current_position_y = pyautogui.position()

  change_x = current_position_x - base_position_x
  change_y = current_position_y - base_position_x

  x_coords.append(change_x)

  y_coords.append(change_y)

  base_position_x, base_position_y = current_position_x, current_position_y

  time.sleep(0.01)

然后我做了这样的事情:

for x, y in zip(x_coords, x_coords)
  pyautogui.move(x, y) 

  time.sleep(0.01)

它最终变得非常缓慢和紧张,所以我认为尝试采用“原始”鼠标输入会更容易编码。

python python-3.x macros pyautogui pynput
1个回答
0
投票

哦,您正在尝试为 Minecraft 创建宏吗?我遇到了游戏中鼠标总是弹回中心的问题。单独使用 PyAutoGUI 或 Pynput 可能有点棘手,因为它们只跟踪屏幕坐标,而不是直接来自鼠标的“原始”输入,而您真正需要的是此类任务。

这是一种更简单、更人性化的方法,使用鼠标库来捕获这些原始动作:

import mouse
import time

# Store all movements
mouse_movements = []

def record_movement(event):
    if isinstance(event, mouse.MoveEvent):
        mouse_movements.append((event.dx, event.dy))

# Hook into mouse movements
mouse.hook(record_movement)

try:
    print("Recording... Press Ctrl+C to stop.")
    while True:
        time.sleep(0.01)
except KeyboardInterrupt:
    mouse.unhook(record_movement)
    print("Stopped recording.")

# Replay the movements
for dx, dy in mouse_movements:
    mouse.move(dx, dy, absolute=False)
    time.sleep(0.01)

要点:

  • 原始输入:我们使用 mouse.hook 捕获鼠标的每一个微小移动。
  • 非阻塞循环:它会一直运行直到您按下Ctrl+C,这对于现场录音非常方便。
  • 重播:使用相对移动来模拟原始动作。

这样,您将获得更流畅的《我的世界》等游戏的输入模仿。只需确保您安装了鼠标库(pip install mouse),您可能需要管理员权限来捕获所有事件,尤其是在游戏中。

希望这可以帮助您更轻松地制作 Minecraft 宏记录器!

© www.soinside.com 2019 - 2024. All rights reserved.