我正在用 Python 编写代码来帮助我在 Roblox 游戏中完成某些任务。我不会讲太多细节,但基本上,目标是自动单击屏幕上的某些点。为了尝试完成此任务,我使用 pyautogui.click()。因此,例如,如果我需要单击的点是 (300, 500),我会执行 pyautogui.click(300, 500)
在 Roblox 之外,pyautogui 工作得很好。但是,每当我打开 Roblox 并使用命令时,它就无法正常工作。因此,假设鼠标从 (0, 0) 开始,我在 (300, 500) 处激活单击。当发生这种情况时,鼠标光标不会移动,并且单击发生在鼠标原来所在的 (0, 0) 处。然而,只要我稍微移动实际鼠标,鼠标光标就会传送回它应该在的位置 (300, 500)。
这使得我无法执行我想要的操作,因为我希望程序能够在某些位置单击,而无需移动实际的物理鼠标。有谁知道我如何使用 python 来正确移动鼠标?
你必须使用 win32api 和 win32con 来移动和单击鼠标,因为 pyautogui 有时很慢,所以我使用 win32api 来代替。
这是我使用的代码。
from pyautogui import *
import pyautogui
import time
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.1) #uses time api, to simulate normal input.
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
你必须使用 pyautoit 才能使其在 roblox 中工作,我使用 autoit.mouse_click("left",x, y) 使鼠标移动到屏幕中的 x 和 y 位置,然后单击左键或右键。
是的,我也遇到了同样的问题,所以我改用了 AHK(自动热键)。我认为(不知道后台发生了什么)python 发出的 win32 api 调用没有使用深层方法,因为你必须下载并授予 AHK 权限才能实现这一点。所以 Roblox 可能已经找到了一种检测物理输入的方法,尽管他们仍然无法检测 AHK 进行的深度 api 调用
pyautogui + directinput 适用于来自 MS 商店的 roblox,win32 gui 适用于旧版 roblox(Web 浏览器启动)