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

Posted

技术标签:

【中文标题】如何为罗技鼠标编写简单的 Lua 代码?【英文标题】:How can I write simple Lua code for Logitech mouse? 【发布时间】:2020-03-10 00:04:33 【问题描述】:

我正在尝试为罗技鼠标制作一个脚本:

    当按下鼠标左键时,将激活案例 1 按住鼠标右键并按下鼠标左键时,将激活案例2

但是,无论我如何尝试,它都只适用于案例 1。

EnablePrimaryMouseButtonEvents(true)

function OnEvent(event, arg)
  -- Case 1: Press only Button  1
  if (event == "MOUSE_BUTTON_PRESSED" and arg == 1 and IsKeyLockOn("scrolllock") == false) then
    Sleep(77)   
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 4)
      Sleep(76) 
    end 
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 6)
      Sleep(62) 
    end
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 5)
      Sleep(84) 
    end

  --Case 2: Press button 1+2
  elseif (event == "MOUSE_BUTTON_PRESSED" and arg == 2 and IsKeyLockOn("scrolllock") == false) then
    Sleep(77)   
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 8)
      Sleep(76) 
    end 
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 9)
      Sleep(62) 
    end 
    if (IsMouseButtonPressed(1)) then
      MoveMouseRelative(0, 0)
      Sleep(84)
    end 
  end
end

我想在我按下这个脚本的人民币时再添加一个案例:

按下 RMB -> 按下 Lshift 按钮 释放RMB时->再次按下Lshift键

我在脚本的末尾添加了如下,它不起作用。

elseif (event == "MOUSE_BUTTON_PRESSED" and arg==2 and IsKeyLockOn("scrolllock")==false) then       
    PressAndReleaseKey("lshift")


elseif (event == "MOUSE_BUTTON_RELEASED" and arg==2 and IsKeyLockOn("scrolllock")==false) then
    PressAndReleaseKey("lshift")

如果我想添加案例 3:按 LAlt + LMB,那么我应该把 IsModifierPressed("lalt") 放在哪里?我尝试如下但失败了

function OnEvent(event, arg)
  if (event == "MOUSE_BUTTON_PRESSED" and arg == 1 and not IsKeyLockOn("scrolllock")) then
    if not IsMouseButtonPressed(3) then -- 3 = Right Mouse Button (it's the same button as arg==2)
      -- Case 1: Press only LMB
    if IsModifierPressed("lalt") then 
      -- Case 3: Press LAlt+LMB
   else
      -- Case 2: Press RMB+LMB
    end
  elseif ((event == "MOUSE_BUTTON_PRESSED" or event == "MOUSE_BUTTON_RELEASED") and arg==2 and not IsKeyLockOn("scrolllock")) then
    PressKey("lshift") 
    Sleep(50)
    ReleaseKey("lshift") 
  end 
end

【问题讨论】:

其实代码并没有按照你说的做。我不熟悉罗技软件,但在你的情况下,如果没有按下键 1(因为elseif),你只会进入elseif (event == "MOUSE_BUTTON_PRESSED"。将第二个语句作为“正常”的 if 语句放入另一个语句中,它将起作用。 【参考方案1】:
function OnEvent(event, arg)
  if (event == "MOUSE_BUTTON_PRESSED" and arg == 1 and not IsKeyLockOn("scrolllock")) then
    if IsModifierPressed("lalt") then 
      -- Case 3: Press LAlt+LMB
    elseif not IsMouseButtonPressed(3) then -- 3 = Right Mouse Button (it's the same button as arg==2)
      -- Case 1: Press only LMB
    else
      -- Case 2: Press RMB+LMB
    end
  elseif ((event == "MOUSE_BUTTON_PRESSED" or event == "MOUSE_BUTTON_RELEASED") and arg==2 and not IsKeyLockOn("scrolllock")) then
    PressKey("lshift") 
    Sleep(50)
    ReleaseKey("lshift") 
  end 
end

【讨论】:

提前感谢您的帮助:D 我想在我按此脚本的 RMB 时再添加一个案例: - 当按 RMB -> 按 Lshift 按钮。 - 释放人民币时 -> 再次按下 Lshift 按钮。我在下面添加了脚本的结尾,它不起作用,你能帮帮我吗? elseif (event == "MOUSE_BUTTON_PRESSED" and arg==2 and IsKeyLockOn("scrolllock")==false) 然后 PressAndReleaseKey("lshift") elseif (event == "MOUSE_BUTTON_RELEASED" and arg==2 and IsKeyLockOn("scrolllock" )==false) 然后 PressAndReleaseKey("lshift") 再问一个问题 :) @Kel - 已更新。 我还有一个问题,希望你能帮助我xD link【参考方案2】:

elseif 前不得有end。 elseif 自动充当最后一个 if 的 end

我很惊讶这段代码甚至可以编译和运行,正如你所提到的,第一种情况确实有效。

编辑:您也不需要在 if 的条件周围使用括号。由于它已经被ifthen 封装,因此语言设计没有必要像其他语言那样强制要求。

【讨论】:

只是格式不好,end 关闭了内部if

以上是关于如何为罗技鼠标编写简单的 Lua 代码?的主要内容,如果未能解决你的问题,请参考以下文章

罗技 LUA 脚本添加睡眠定时器

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

高分请求JavaScript高人们:如何用JavaScript判断鼠标键盘无动作?

罗技统一接收器协议?

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

罗技鼠标单滑滚轮向下滑的脚本,就是按住鼠标中键就会每隔10毫秒重复向下滑一下滚轮,松开就取消的那种?