LUA 上 MouseMove Relative 的 Sleep() 函数有问题

Having problems with Sleep() func on MouseMoveRelative on LUA

获得了一个新的驱动器并安装了一个新的 windows。

在旧 OS 之前,我可以使用“睡眠”使“MoveMouseRelative”像自然移动一样工作。

我已经创建了一个函数,我可以移动鼠标调用它,我希望它“移动”多少次

以及每次“移动”之间的毫秒数示例:(效果很好)

function _move(x, range, time, range2)
    for i = 1, x do
    MoveMouseRelative(range,range2)
    Sleep(time)
    end
end 

n

如果我在每个“MoveMouseRelative”之间设置“Sleep(1)”,它会像“Sleep(50)”一样移动,我不知道为什么。

如果我用 50 次 1 毫秒的移动调用它,则需要 2.5 秒而不是 50 毫秒才能完成

在我的旧驱动器上安装了旧 OS 安装(同一台 PC),我可以使用它通常需要 50 毫秒

好像软件不让我用小毫秒,比如1毫秒。

尝试过

LGHUB 重新安装

停用 AV

禁用 windows、

上的内容

正在从运行良好的 OS 复制 LGHUB 文件夹

复制带有配置的 LGHUB 文件夹(LocalAppdata)

我的鼠标是G502 SE

帮忙?

长话短说:
Sleep(1) 行为不稳定,不应使用。
Sleep() 的精度比你想象的要差得多。


长答案:

Sleep() 在 LGHUB 脚本内部调用 WinAPI 函数 Sleep.

文档摘录:

After the sleep interval has passed, the thread is ready to run. Note that a ready thread is not guaranteed to run immediately. Consequently, the thread may not run until some time after the sleep interval elapses.

The system clock "ticks" at a constant rate. If dwMilliseconds is less than the resolution of the system clock, the thread may sleep for less than the specified length of time. If dwMilliseconds is greater than one tick but less than two, the wait can be anywhere between one and two ticks, and so on.

这里的“滴答”是“时间片”长度,在我的 Windows 上是 15 毫秒(但在另一个 Windows 版本上可能是 10 毫秒)。

正如您从上面的文档中看到的那样,Sleep() 函数的精度为一个“刻度”,因此 Sleep(1) 的行为在设计上是不稳定的。