我知道 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)
它最终变得非常缓慢和紧张,所以我认为尝试采用“原始”鼠标输入会更容易编码。
哦,您正在尝试为 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)
这样,您将获得更流畅的《我的世界》等游戏的输入模仿。只需确保您安装了鼠标库(pip install mouse),您可能需要管理员权限来捕获所有事件,尤其是在游戏中。
希望这可以帮助您更轻松地制作 Minecraft 宏记录器!