罗技 lua 可靠睡眠

Posted

技术标签:

【中文标题】罗技 lua 可靠睡眠【英文标题】:Logitech lua reliable Sleep 【发布时间】:2021-05-15 04:51:10 【问题描述】:

简介

我正在为我的罗技鼠标编写一个 lua 脚本。罗技 lua api 有 this 文档。

我的脚本每 x 毫秒移动一次鼠标以绘制图案。我的问题是这个 lua api 的 Sleep(x) 函数非常不准确。我已经读过它需要时间(几毫秒)才能获得一个线程,因此时间会增加代码本身的执行时间。然而,它使得它无法测量毫秒。

问题

您知道解决方法吗?有没有比 Sleep(x) 函数更强大的毫秒测量方法?

我还想指出,在 Windows 10 版本 1909 及以下版本中,它要准确得多。他们弄乱了它,因此自 Windows 10 2004 版(去年 8 月左右)以来它是不准确的。所以我需要为此找到解决方法。

我的代码

这是我的代码中的一个 sn-p:

PressMouseButton(1)
--1
MoveMouseRelative(-26, 36)
Sleep(127)
--2
MoveMouseRelative(2, 36)
Sleep(127)
--3
MoveMouseRelative(-36, 32)
Sleep(127)
--4
MoveMouseRelative(-33, 30)
Sleep(127)
--5
MoveMouseRelative(-11, 38)
Sleep(127)
ReleaseMouseButton(1)

这本身不起作用,但您可以在此处查看我想如何使用该功能。 感谢您的帮助!

【问题讨论】:

为什么首先需要毫秒精度? Sleep with better precision 【参考方案1】:

Sleep 不用于测量毫秒。它会暂停您的脚本一段时间。

据我所知,无法从 Logitech 脚本加载任何库。

所以你只能使用Sleep或者运行一个循环来延迟。

【讨论】:

您好,首先感谢您的回答!所以我想我不清楚,我不希望它来衡量时间。我需要这个函数来停止我的程序一段准确的时间,以毫秒为单位。正如我现在看到的,这个函数对于这个目的不够准确。当您说“运行循环以延迟”时,您到底是什么意思?你能为此展示一个代码示例吗?感谢您的宝贵时间 井延迟通常使用循环来实现。循环周期越多,执行所需的时间就越长。这样您就可以实现自己的延迟功能并对其进行调整。但总的来说,无论如何您都不应该期望这样的应用程序具有毫秒精度。【参考方案2】:

给你发个罗技高精度延时,精确到1ms,为什么要高精度,因为win10 1909以后的系统版本,罗技脚本1ms=15.6ms,所以需要

function Sleep3(time)
    local a = GetRunningTime()
    while GetRunningTime()-a < time do
    end
end

【讨论】:

以上是关于罗技 lua 可靠睡眠的主要内容,如果未能解决你的问题,请参考以下文章

在 USR1 信号后可靠地杀死睡眠进程

罗技 g512 键盘的 lua 脚本问题

如何在 iPhone 上可靠地获取位置

罗技/LGHUB Lua - 带中断的循环

如何为罗技鼠标编写简单的 Lua 代码?

开机时是不是有可靠的方法重新连接配对的 ZAGG - Logitech 蓝牙键盘?