如何为 Logitech 鼠标编写简单的 Lua 代码?
How can I write simple Lua code for Logitech mouse?
我正在尝试为罗技鼠标制作一个脚本:
- 当按下鼠标左键时,将激活案例 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 按钮
- 释放人民币时->再次按下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
elseif 前不能有 end
。 elseif 自动作为最后一个 if 的 end
。
令我惊讶的是这段代码甚至可以编译和运行,正如您提到的,第一种情况确实有效。
编辑:您也不需要在 if 的条件两边使用括号。由于它已经被 if
和 then
封装,因此语言设计没有必要像其他语言那样强制执行这些。
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
我正在尝试为罗技鼠标制作一个脚本:
- 当按下鼠标左键时,将激活案例 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 按钮
- 释放人民币时->再次按下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
elseif 前不能有 end
。 elseif 自动作为最后一个 if 的 end
。
令我惊讶的是这段代码甚至可以编译和运行,正如您提到的,第一种情况确实有效。
编辑:您也不需要在 if 的条件两边使用括号。由于它已经被 if
和 then
封装,因此语言设计没有必要像其他语言那样强制执行这些。
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