#lua #logitech #logitech-gaming-software
Вопрос:
Я написал простой скрипт Lua, который оставляет щелчки после нажатия кнопки mouse5. Проблема в том, что в строке 12, если я включу «нет», оно повторится только один раз, если я его удалю, оно повторится навсегда. Я хочу начать и завершить сценарий с помощью mouse5, если это возможно. Я знаю, что у людей и раньше были подобные проблемы, но я не смог найти решение. Есть какие-нибудь идеи?
Я использую API Logitech G Hub: (https://douile.github.io/logitech-toggle-keys/APIDocs.pdf)
И это для моего цикла: (https://www.tutorialspoint.com/lua/lua_repeat_until_loop.htm)
Мой код:
function OnEvent(event, arg)
OutputLogMessage("Event: "..event.." Arg: "..arg.."n")
EnablePrimaryMouseButtonEvents(true)
function OnEvent(event, arg)
if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
repeat
Sleep(math.random(1046, 1292))
PressMouseButton(1)
Sleep(math.random(27, 78))
ReleaseMouseButton(1)
Sleep(math.random(314, 664))
until not IsMouseButtonPressed(5)
end
end
end
Комментарии:
1. Ваш код должен работать правильно. Пожалуйста, обратите внимание, что кнопка мыши G5 должна быть привязана к действию «Вперед» в интерфейсе GHUB. Это настройка по умолчанию, вы, вероятно, изменили ее вручную.
Ответ №1:
Обратите внимание, что ваша функция обработчика событий объявляется второй раз внутри самой себя в строке 4.
Кроме того, EnablePrimaryMouseButtonEvents() не обязательно вызывать несколько раз или с каждым входным событием — его можно поместить вне функции, где он будет выполняться только один раз. Что-то вроде первой или последней строки, вероятно, хорошая идея.
Наконец, я бы сказал, что условия сверху вниз немного более ясны. Так как насчет того, чтобы дать себе немного времени, чтобы отпустить кнопку и выполнить цикл while, если вы это сделаете. Если вы будете удерживать кнопку во время повторной проверки состояния кнопки, это остановит цикл :
EnablePrimaryMouseButtonEvents(true)
function OnEvent(e,a)
OutputLogMessage("Event: "..e.." Argument: "..a.."n")
if e=="MOUSE_BUTTON_PRESSED" and a==5 then
Sleep(200)
while not IsMouseButtonPressed(5) do
Sleep(math.random(1046,1292))
-- maybe add another check here "if IMBP(5) then return end"
PressMouseButton(1)
Sleep(math.random(27,78))
ReleaseMouseButton(1)
Sleep(math.random(314,664))
end end
end