如何设置LUA中MoveMouseRelative函数的执行时间?

Posted

技术标签:

【中文标题】如何设置LUA中MoveMouseRelative函数的执行时间?【英文标题】:How to set the execution time of the MoveMouseRelative function in LUA? 【发布时间】:2021-07-23 14:58:49 【问题描述】:

我是编程新手,需要问一个问题。 因此,加载到罗技鼠标中的这段代码以给定的速度拉下它:

MoveMouseRelative(0,3)
                        Sleep(25)

问题的本质:如何在切换到另一个功能之前以毫秒为单位设置此功能的确切时间,可能是这样的:

MoveMouseRelative(0,1)
                        Sleep(18)

因此,鼠标以一种速度移动一段时间,然后切换到另一种速度。 这是要修复的代码:

EnablePrimaryMouseButtonEvents(true);
 
function OnEvent(event, arg)
 
        if IsMouseButtonPressed(3)then
            repeat  
                if IsMouseButtonPressed(1) then
                    repeat
                        MoveMouseRelative(0,3)
                        Sleep(25)

                    until not IsMouseButtonPressed(1) 
                end             
            until not IsMouseButtonPressed(3)
        end 
end

感谢您的支持

【问题讨论】:

您可以将repeat 循环替换为for i=1,10 do 循环,以在可预测的时间间隔后退出循环。 【参考方案1】:

MoveMouseRelative 参数始终为整数(越大越快)Sleep 参数建议为 15 的倍数(越小越快)

EnablePrimaryMouseButtonEvents(true)
 
function OnEvent(event, arg)
   Sleep(10)
   if IsMouseButtonPressed(3) and IsMouseButtonPressed(1) then
      local t0 = GetRunningTime()
      repeat
         MoveMouseRelative(0,3)  -- move fast
         Sleep(15)
      until GetRunningTime() > t0 + 500  -- exit this loop after 500 ms
         or not (IsMouseButtonPressed(3) and IsMouseButtonPressed(1))
      repeat
         MoveMouseRelative(0,1)  -- move slow
         Sleep(30)
      until not (IsMouseButtonPressed(3) and IsMouseButtonPressed(1))
   end 
end

【讨论】:

【参考方案2】:

影响函数执行时间的唯一方法是降低 CPU 时钟(您不能)或插入空闲时间。

这就是您使用 sleep 已经在做的事情。

请注意,时间通常不是很准确。所以不要指望微秒级的分辨率。

【讨论】:

以上是关于如何设置LUA中MoveMouseRelative函数的执行时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nginx 中引用 lua 设置的变量?

如何从 Lua C API 获取由 lua 设置的元表

lua 如何设置随机种子、

在 Lua 中如何导入模块?

LUA教程13-如何设置开机音乐和替换开机logo

如何在 Apache 中设置 mod_lua 以访问第三方 Lua 模块?