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

How can I write simple Lua code for Logitech mouse?

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

  1. 当按下鼠标左键时,将激活案例 1
  2. 当按住鼠标右键并按下鼠标左键时,会激活案例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

我想再补充一个这个脚本按人民币的情况:

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

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

elseif 前不能有 end。 elseif 自动作为最后一个 if 的 end

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

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

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