Python Win32API 鼠标记录和延迟模拟:精确还原鼠标移动
要记录鼠标的移动并记录延迟,可以使用win32api库提供的鼠标钩子和时间戳来实现。
首先,使用win32api的SetWindowsHookEx函数来设置鼠标钩子,以便在鼠标移动时记录其坐标和时间戳。可以使用一个全局变量来保存上一个记录的时间戳,以便计算延迟。
接下来,可以使用win32api提供的mouse_event函数来模拟鼠标移动。使用之前记录的鼠标坐标和时间戳,计算出每个移动的延迟,并使用time库提供的sleep函数来等待这段时间。
最后,可以使用win32api提供的UnhookWindowsHookEx函数来取消鼠标钩子。
下面是一个示例代码:
import time
import win32api
import win32con
import win32gui
# 全局变量,用于记录上一个鼠标移动的时间戳
last_time = None
# 鼠标钩子回调函数
def mouse_callback(nCode, wParam, lParam):
if nCode == win32con.HC_ACTION:
# 解析鼠标坐标和时间戳
ms = win32api.GetMessageTime()
x, y = win32api.GetCursorPos()
# 如果是第一次记录,直接更新last_time
if last_time is None:
last_time = ms
else:
# 计算延迟并等待
delay = ms - last_time
time.sleep(delay / 1000.0)
# 模拟鼠标移动
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE,
int(x * 65535 / win32api.GetSystemMetrics(win32con.SM_CXSCREEN)),
int(y * 65535 / win32api.GetSystemMetrics(win32con.SM_CYSCREEN)),
0, 0)
# 更新last_time
last_time = ms
# 调用下一个钩子
return win32gui.CallNextHookEx(None, nCode, wParam, lParam)
# 设置鼠标钩子
hook_id = win32gui.SetWindowsHookEx(win32con.WH_MOUSE_LL, mouse_callback,
win32api.GetModuleHandle(None), 0)
# 进入消息循环,等待钩子回调
win32gui.PumpMessages()
# 取消鼠标钩子
win32gui.UnhookWindowsHookEx(hook_id)
原文地址: https://www.cveoy.top/t/topic/lWNG 著作权归作者所有。请勿转载和采集!