要记录鼠标的移动并记录延迟,可以使用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)
Python Win32API 鼠标记录和延迟模拟:精确还原鼠标移动

原文地址: https://www.cveoy.top/t/topic/lWNG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录