首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使这个logitech lua脚本向左移动我的鼠标,然后向右重复,直到鼠标按钮1不再按下为止。

如何使这个logitech lua脚本向左移动我的鼠标,然后向右重复,直到鼠标按钮1不再按下为止。
EN

Stack Overflow用户
提问于 2022-09-27 05:07:11
回答 1查看 263关注 0票数 0

我学到了lua。这是我的第一种编程语言。我自己编写了这个脚本,使用logitechs文档来学习语言。

我写了两个类似的代码,试图从两种不同的方式来解决我的问题。两者都失败了。

Code#1

代码语言:javascript
运行
复制
EnablePrimaryMouseButtonEvents(true)

function OnEvent(event, arg)
    --OutputLogMessage("Event: "..event.." Arg: "..arg.."\n")
    if IsKeyLockOn("capslock") then
        repeat
            if IsMouseButtonPressed(1) then
                repeat
                    PressAndReleaseKey("p")
                    Sleep(10)
                    MoveMouseRelative(-10,0)
                    Sleep(10)
                    MoveMouseRelative(10,0)
                    Sleep(10)
                until not IsMouseButtonPressed(1)
            end
        until not IsKeyLockOn("capslock")
    end
end

这段代码的意思是反复按下键盘按钮"p“,然后反复向左移动鼠标,然后向右移动,直到LMB不再被按下。我所使用的方法是使用MoveMouseRelative左转,然后暂停10 10睡眠(10),然后使用MoveMouseRelative右转,然后重复这个循环。我注意到它从左向右移动太快,当我增加睡眠延迟时,它也增加了"P“被按压的延迟。因此,我认为我需要找到一种方法,使程序从左向右移动更慢,而不影响按下"P“的速度。

现在是第二次尝试Code#2

代码语言:javascript
运行
复制
EnablePrimaryMouseButtonEvents(true)

function OnEvent(event, arg)
    --OutputLogMessage("Event: "..event.." Arg: "..arg.."\n")
    if IsKeyLockOn("capslock") then
        repeat
            if IsMouseButtonPressed(1) then
                repeat
                    PressAndReleaseKey("p")
                    Sleep(10)
                        for i = 1, 20 do
                            MoveMouseRelative(10,0)
                        end
                        for i = 1,20 do
                            MoveMouseRelative(-10,0)
                        end
                until not IsMouseButtonPressed(1)
            end
        until not IsKeyLockOn("capslock")
    end
end

这段代码基本上是按照我想要的方式做的。问题是,当我长时间按住鼠标按钮时,当我释放鼠标按钮时,我的鼠标仍会从左向右移动一段时间。所以我需要一个方法来做它,这样当我释放我的鼠标按钮,它停止从左向右移动,无论发生什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-29 13:05:36

关于您之前关于使鼠标移动平稳的评论,

能否详细说明一下您的意思:重复移动一点点+在循环中稍微睡觉。

下面是一个如何使鼠标运动最流畅的例子。

首先,在OnEvent之前定义以下函数

代码语言:javascript
运行
复制
function SmoothMouseMovement(x_speed, y_speed, duration)
    local last_x, last_y = 0, 0
    local tm_start = GetRunningTime()
    repeat
        Sleep(5)
        if not IsMouseButtonPressed(1) then break end
        local tm = math.min(GetRunningTime() - tm_start, duration)
        local x = math.floor(x_speed * tm)
        local y = math.floor(y_speed * tm)
        if x ~= last_x or y ~= last_y then
            MoveMouseRelative(x - last_x, y - last_y)
            last_x = x
            last_y = y
        end
    until tm >= duration
end

其次,用以下代码替换旧循环for i = 1,20 do

代码语言:javascript
运行
复制
local x_speed = 1.5  -- pixels per millisecond
local duration = 200 -- milliseconds
SmoothMouseMovement(x_speed, 0, duration)
local x_speed = -1.5  -- pixels per millisecond
local duration = 200  -- milliseconds
SmoothMouseMovement(x_speed, 0, duration)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73862616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档